Diferencia entre revisiones de «Usuario:ManuelRomero/php/BasesDatos»

De WikiEducator
Saltar a: navegación, buscar
(Mysql y su extensión mysqli para php)
(Cambiar la base de datos)
Línea 219: Línea 219:
  
 
===Cambiar la base de datos===
 
===Cambiar la base de datos===
*Si hemos seleccionado una base de datos y queremos cambiar a otra
+
*Si hemos seleccionado una base de datos, o no hemos seleccionado ninguna y queremos cambiar a otra
 
<source lang=php>
 
<source lang=php>
 
$miConexion->select_db("nombre_base_datos");
 
$miConexion->select_db("nombre_base_datos");
Línea 227: Línea 227:
 
$miConexion->close();
 
$miConexion->close();
 
</source>
 
</source>
 +
===DML===
 +
*En SQL sabemos que tenmos tres tipos de lenguajes DDL, DML, DCL
 +
*Ahora toca DML, Leguane de maninputación de datos
 +
*Podemos clasificar en dos tipos de clúsulas:
 +
#las que no devuelven registros de datos (INSERT, DELETE, UPDATE)
 +
##Generalmente retornan un entero que es el número de filas aceptadas o un booleano que indica si se realizó no la operación
 +
#Las que pueden retornan  una colección de filas (SELECT), generalmente conocidas como cursor.
 +
*En mysqli podemos enviar cualquiera de estas claúsulas con el método '''''query'''''
 +
===INSERT, UPDATE Y DELETE===
 +
*Este tipo de sentencias retornan un booleano que indica si se ha realizado o no la acción
 +
*El número de filas afectadas lo podemos ver en el atributo '''''affected_rows'''''
 +
{{Resumen|
 +
<source lang=php>
 +
$reusultado=miConexion-query($consulta)
 +
if($resultado){
 +
  echo"Se han afectado $miConexion->affected_rows filas en esta acción");
 +
}
 +
</source>
 +
}}
 +
<source lang=php>
 +
$sentenciaDelete="DELETE FROM tabla WHERE condicion";
 +
$sentenciaInsert="INSERT INTO tabla (opcional lista de campos) VALUES (valores en posiciones respectivas a los campos);
 +
$sentenciaUpdate="UPDATE tabla WHERE condicion";
  
Dentro del servidor tendremos diferentes bases de datos
+
 
Antes de trabajar con una debemos seleccionarla
+
$miConexion->query($sentenciasDelete);
Si no la seleccionamos se intentará operar con la última seleccionada
+
$resultado =$miConexion->query($sentenciaDELETE);
bool mysql_select_db ($namedatabase, $conexion)
+
if ($resultado){
*Ejemplo
+
    echo "Se han borrado $miConexion->affected_rows filas ";
<?php
+
}
  $conexion = mysql_connect('localhost', 'manolo', 'manolo');
+
 
if (!$conexion) {
+
$miConexion->query($sentenciasUpdate);
    die('No conectado : ' . mysql_error());
+
$resultado = $miConexion->query($sentenciaUPDATE);
  }
+
if ($resultado){
// Seleccionar alumnos como base de datos activa
+
    echo "Se han actualizado $miConexion->affected_rows filas ";
$db_seleccionada = mysql_select_db('alumnos', $conexion);
+
}
  if (!$db_seleccionada) {
+
 
    die ('No puedo conectar con la BD alumno : ' . mysql_error());
+
$miConexion->query($sentenciasInsert);
}
+
$resultado = $miConexion->query($sentenciaINSERT);
?>
+
if ($resultado){
 +
    echo "Se han insertado $miConexion->affected_rows filas ";
 +
}
 +
 
 +
</source>
 +
 
 +
*Observemos su uso en el ejemplo
 +
 
 +
<source lang=php>
 +
   
 +
  //Establecemos la conexión
 +
  $miConexion = new mysqli('localhost', 'manolo', '12345.', 'baseDatosPrueba');
 +
 
 +
  //Capturamos un posible error
 +
  $error = $miConexion->connect_errno;
 +
   
 +
  //En caso de error informamos de ello
 +
  if ($error == null) {
 +
    $resultado = $miConexion->query('DELETE FROM stock WHERE unidades=0');
 +
   
 +
    if ($resultado) {
 +
      print "<p>Se han borrado $miConexion->affected_rows registros.</p>";
 +
    }
 +
  }
 +
  $miConexion->close();
 +
}
 +
</source>
 
</div>
 
</div>
  
 
<div class="slide">
 
<div class="slide">
 +
 
===FUNCIONES die()- mysql_error() y concatenador .===
 
===FUNCIONES die()- mysql_error() y concatenador .===
 
  die('texto');
 
  die('texto');

Revisión de 11:29 27 oct 2014

Road Works.svg Trabajo en proceso, espera cambios frecuentes. Tu ayuda y retroalimentación son bienvenidos.
Ver página de charlas.
Road Works.svg





DWES TituloTema3.gif

BASES DE DATOS

Introducción

  • Idea de independizar la base de datos y el lenguaje de programación: concepto de driver, conector y extensión (mysql, mysqli, PDO).
http://php.net/manual/es/mysqli.overview.php
  • Para trabajar con bases de datos debemos
    • Conectarnos (Para ello necesitamos un software específico del gestor de bases de datos con el que vayamos a trabajar).
    • Seleccionar (La base de datos con la que vamos a trabajr).
  • Normalmente también
    • Actuar con la base de datos (Consultas, inserciones, modificaciones y/o borrados)
    • Procesar información
    • Cerrar la base de datos
  • Para realizar estas acciones disponemos de diversas funciones específicas dentro de PHP,
  • PHP tiene un API especifico para trabajar directamente con mysql mysqli, el cual incorpora el driver y conector necesario para trabajar con ella de forma nativa
  • Que el driver sea nativo es que está implementado utlizando un framework de extensiones dde php.
  • También vamos a disponer de la extensión PDO, la cual se independiza del gestor concreto de bases datos que vayamos a utilizar.
  • Por lo tanto en este tema vamos a ver dos extensiones:
  1. mysqli usar una extensión nativa con su SGBD en concreto mysql que viene con el propio lenguaje
  2. PDO usar una extensión genéricoa que permite conectarse con cualquier gestor de BD, sin necesidad de cambiar nada de código.

Introduccion Usao de extensiones orientadas a objetos

  • Para trabajar con las extensiones, las usaremos siempre orientadas a objetos, aunque tengan

la correspondiente funcionalidad en el lenguaje estructurado.

  • Para recordar muy brevemene posemos usar el siguiente enlace
http://www.desarrolloweb.com/articulos/1540.php
  • Posteriormente veremos un tema de php orientado a objetos
  • Recordamos que para crear una nueva instancia de una clase usamos el operador new
    $miObjeto = new Clase();
  • Para acceder a los diferentes métodos del objeto instaciado
 $miObjeto->metodo($parametros);
  • Con estos detalles nos sobra de momento para este tema.


Mysql y php
  • Instalar mysql lo hicimos en el primer tema
apt-get install mysql-server mysql-client
  • Para parar/arrancar el servicio
service mysql start/stop/restart/status
  • El fichero de configuración
/etc/mysql/my.cnf
  • En él podemos ver el puerto (3306 por defecto), el usuario y otros parámetros del servicio
  • Podemos accecder a la documentación que php da sobre mysqli (mysql improve), o sea interfaz mysql mejorada http://php.net/manual/es/class.mysqli.php
  • Debmos saber conectarnos por línea de comandos


Icon activity.jpg

Actividad

  1. Conectar a mysql
  2. Mira Las bases de datos que tienes
  3. usa una base de datos concreta
  4. mira las tablas que tiene esa bases de datos
  5. mira la estructura de la tabla
  6. Haz una consulta de los valores que tiene su primera columna
  7. ejecuta el comando help
  8. sal de sql




Archivo:BaseDatos.pdf


Icon activity.jpg

Actividad

Usa mysql para cargar por líneas de comandos el siguiente fichero arriba especificado




  • En la siguiente página puedes hacer un repaso de mysql
http://dev.mysql.com/doc/refman/5.7/en/index.html
  • Un manual en castellano
http://ftp.nchu.edu.tw/MySQL/doc/refman/5.0/es/
  • Debemos conocer también la herramienta phpmyadmin
sudo apt-get install phpmyadmin
  • Aquí tienes una pequeña guía es de uso sencillo e intuitivo
http://www.ite.educacion.es/formacion/materiales/85/cd/linux/m5/instalacin_y_configuracin_de_phpmyadmin.html
  • Y más información en la página oficial
http://www.phpmyadmin.net/home_page/index.php


Icon activity.jpg

Actividad

Probamos a conectarno por phpmyadmin a nuestro servidor local




Archivo:Datos.sql


Icon activity.jpg

Actividad

Usando phpmyadmin, carga los datos para poblar la base de datos



  • Otra herramienta importante que permite realizar diseños es workbrench
http://dev.mysql.com/doc/workbench/en/index.html
    sudo add-apt-repository ppa:olivier-berten/misc 
    sudo apt-get update 
    sudo apt-get install  mysql-workbench


Icon activity.jpg

Actividad

Instalamos y probamos las diferentes opciones con esta herramienta Probamos a hacer un diseño en modelo realcional y a partir del modelo creamos las tablas.

  • Probamos las opciones forward engineer y reverser engineer




Herramientas de administración

  • Con phpmyadmin, podemos hacer casi todo de administrar y manejar las bases de datos
  • No obstante mysql proporciona una serie de herraminetas que perminten administrar por línea de comandos .
  • En muchas ocasiones este tipo de operaciones resultan muy interesantes.
  1. mysql
  2. myhsqladmin
  3. mysqlshow
mysql
  • Esta heramienta ya la hemos comentado, permite conectarse a un servidor MySQL para ejecutar sentencias SQL
  • Opciomes básicas ya conocidas
  1. connect -h,-u, -p
  2. use database
  3. exit o quit
  4. help Para conocer los comandos que se pueden usar.
     http://ftp.nchu.edu.tw/MySQL/doc/refman/5.0/es/sql-syntax.html
mysqladmin
  • Es un cliente específico para la administración
  • Entre otras acciones podemos realizar
  1. crear y eliminar bases de datos.
  2. mostrar la configuración y el estado del servidor.
  3. cambiar contraseñas.
  4. detener un servidor.
  5. ver la version del servidor
     http://ftp.nchu.edu.tw/MySQL/doc/refman/5.0/es/mysqladmin.html


Icon activity.jpg

Actividad

Prueba a hacer cada una de las acciones especificadas anteriormente




mysqlshow
http://ftp.nchu.edu.tw/MySQL//doc/refman/5.0/es/mysqlshow.html
  • muestra informaicón sobre la base de datos
mysqlshow -u root -proot 
  • Nos mostraría las tablas de ese ususario

Mysql y su extensión mysqli para php

CONECTARNOS A LA BASE DE DATOS
  • A continuación iremos viendo como implementar las acciones básicas en el lenguaje
Conectarse
  • Para conectarse a una base de datos , creamos una instacia de la clase mysqli de la forma
 $miConexion = new mysqli(....);
  • El constructor de la clase puede recibir hasta 5 parámetros, de los cuales 4 se suelen usar con bastante frecuencia
  1. $host nombre o ip del equipo (null o localhost, identificaría el equipo actual).i
  2. $usario es el usuario de la base de datos
  3. $pass
  4. $nombreBD
  5. $puerto
  6. $shocket
 $host="localhost"
 $usuario="manolo";
 $pass="romero";
 $nombreBD="alumnos";
 
 $miConexion = new mysqli ($host,$usuario,$pass,$nombreBD);
 if ($miConexion==null)
     echo"Error conectando a la base de datos";
 else
     echo "Conectado a la base de datos";
  • Esta función retorna el recurso de la conexión
  • Para gestionar los errores deberíamos usar el atributo connect_error de la clase mysqli
  • Este atributo aporta información sobre el error o contiene null si no se ha producido ninguno.
  • En el código anterior
 if ($miConexion->connect_error)
   echo "Error conectando con la base de datos: ".$miConexion->connect_error;
  • Para ver información sobre la conexión se puede usar los atributos *server_info o host_info


Icon summary.gif

Resumen

$conesion= new mysqli($host,$user,$pass,$bd);
mysqli->conect_error
mysqli->conect_errno
mysqli->server_info
mysqli->host_info


  • Hay muchas opciones de mysqli que se pueden configurar en el fichero php.ini
  • Aquí tenemos alguna de ellas
mysqli.allow_persistent
Permite crear conexiones persistentes.
mysqli.default_port
Número de puerto TCP predeterminado a utilizar cuando se conecta al Servidor de base de datos.
mysqli.reconnect
Indica si se debe volver a conectar automáticamente en caso de que se pierda la conexión.
mysqli.default_host.
Host predeterminado a usar cuando se conecta al servidor de base de datos.
mysqli.default_user.
Nombre de usuario predeterminado a usar cuando se conecta al servidor de base de datos.
mysqli.default_pw
Contraseña predeterminada a usar cuando se conecta al servidor de base de datos.
  • La lista completa la podemos ver en el siguiente link
http://php.net/manual/es/mysqli.configuration.php


Icon activity.jpg

Actividad

  • configura dicho fichero, para poder conectar a la base de datos sin aportar parámetros al constructor
  • Luego déjalo como estaba :)




Cambiar la base de datos

  • Si hemos seleccionado una base de datos, o no hemos seleccionado ninguna y queremos cambiar a otra
$miConexion->select_db("nombre_base_datos");
  • Cuando ya no vamos a usar un recurso, conviente y repito CONVIENE, liberarlo.
$miConexion->close();

DML

  • En SQL sabemos que tenmos tres tipos de lenguajes DDL, DML, DCL
  • Ahora toca DML, Leguane de maninputación de datos
  • Podemos clasificar en dos tipos de clúsulas:
  1. las que no devuelven registros de datos (INSERT, DELETE, UPDATE)
    1. Generalmente retornan un entero que es el número de filas aceptadas o un booleano que indica si se realizó no la operación
  2. Las que pueden retornan una colección de filas (SELECT), generalmente conocidas como cursor.
  • En mysqli podemos enviar cualquiera de estas claúsulas con el método query

INSERT, UPDATE Y DELETE

  • Este tipo de sentencias retornan un booleano que indica si se ha realizado o no la acción
  • El número de filas afectadas lo podemos ver en el atributo affected_rows


Icon summary.gif

Resumen

$reusultado=miConexion-query($consulta)
if($resultado){
   echo"Se han afectado $miConexion->affected_rows filas en esta acción");
}


$sentenciaDelete="DELETE FROM tabla WHERE condicion";
$sentenciaInsert="INSERT INTO tabla (opcional lista de campos) VALUES (valores en posiciones respectivas a los campos);
$sentenciaUpdate="UPDATE tabla WHERE condicion";
 
 
$miConexion->query($sentenciasDelete);
$resultado =$miConexion->query($sentenciaDELETE);
if ($resultado){
    echo "Se han borrado $miConexion->affected_rows filas ";
}
 
$miConexion->query($sentenciasUpdate);
$resultado = $miConexion->query($sentenciaUPDATE);
if ($resultado){
    echo "Se han actualizado $miConexion->affected_rows filas ";
}
 
$miConexion->query($sentenciasInsert);
$resultado = $miConexion->query($sentenciaINSERT);
if ($resultado){
    echo "Se han insertado $miConexion->affected_rows filas ";
}
  • Observemos su uso en el ejemplo
 
  //Establecemos la conexión
  $miConexion = new mysqli('localhost', 'manolo', '12345.', 'baseDatosPrueba');
 
  //Capturamos un posible error
  $error = $miConexion->connect_errno;
 
  //En caso de error informamos de ello
  if ($error == null) {
    $resultado = $miConexion->query('DELETE FROM stock WHERE unidades=0');
 
    if ($resultado) {
       print "<p>Se han borrado $miConexion->affected_rows registros.</p>";
    }
  }
  $miConexion->close();
}

FUNCIONES die()- mysql_error() y concatenador .

die('texto');

Es una función que aborta la ejecución previamente visualiza el mensaje del parámetro por pantalla

mysql_error()

visualiza el error que da el sistema por el que no ha podido conectar

.

Es un concatenador de cadenas

echo "Esto es una cadena " . "Esta es otra concatenada a la anterior"


CREAR CONSULTA

resource mysql_query ( string $consulta );

consulta es la consulta a la base de datos

<?php
$resultado = mysql_query('SELECT * from alumnos');
if (!$resultado) {
    die('Invalid query: ' . mysql_error());
}
?> 


PROCESAR INFORMACIÓN

Ahora ya tenemos los datos con los que queremos trabajar los tenemos en una variable de tipo consulta ahora debemos recorrela La variable es como un vector de filas que hay que recorrer

array mysql_fetch_row ( resource $resultado )

esta función devuelve falso o 0 cuando ya no retorna más filas si no retorna la siguiente fila de la consulta la forma de acceder a cada campo será por el índice del array

array[0] .. array[n]
<?php
$resultado = mysql_query("SELECT nombre, apellido, direccion FROMM alumnos");
if (!$resultado) {
   die("Could not run query: " . mysql_error();
}
$c=0;
while ($alumno=mysql_fetch_row($result)){
     echo "alumno $c nombre $alumno[0] apellido $alumno[1] direccion $alumno[3]");
     $c++;
?>

GESTIÓN DE BASE DE DATOS

Conocer todas las bases de datos

mysql_connect('localhost', 'mysql_user', 'mysql_password');

Todas las tablas de una base de datos

resource mysql_list_tables ( string $database [, resource $link_identifier ])

Los campos de una tabla

resource mysql_list_fields ( string $database_name , string $table_name [, resource $link_identifier])

</div>


Obtenido de «https://es.wikieducator.org/index.php?title=Usuario:ManuelRomero/php/BasesDatos&oldid=15936»