| Curso de PHP y MySQL José Gómez Castaño |
Acceso y gestion de datos MySQLUno los casos en los que más se utiliza PHP, es en el acceso y manipulación de datos almacenados en servidores de bases de datos. El servidor más extendido en internet es MySQL, sobre todo en páginas personales y de pequeñenas y medianas empresas. Por este motivo vamos a explicar las tareas básicas con las que acceder al servidor desde PHP. Nuestro lenguaje contiene funciones que hacen estas tareas muy fáciles de llevar a cabo. A la derecha aparece la lista completa de funciones y su enlace al manual oficial de PHP El procedimiento a seguir en todos los casos es el siguiente:
Como ejemplo, vamos a utilizar estas funciones en el ejemplo que estamos llevando a cabo en el curso, y conectaremos a nuestra base de datos GESTIONCONTENIDOS, concretamente a la tabla USUARIOS. Hacemos una consulta para que nos muestre el contenido de los campos de un usuario en concreto.
<?php
// Definimos las credenciales del usuario que hace uso de la BD
$UsuarioDB='root';
$ClaveDB='';
$Servidor = 'localhost';
// Conectamos al servidor
$conexion=mysql_connect($Servidor,$UsuarioDB,$ClaveDB);
// Controlamos el error de conexion
if (!$conexion) {
die('No puedo conectar, error : '.mysql_error());
}
// Seleccionamos la BD
mysql_select_db('gestioncontenidos');
// Creamos la sentencia SQL que devuelve todos los campos del registro
// cuyo nombre de usuario es pepe
$sql = "SELECT * FROM usuarios WHERE usuario = 'pepe'";
// Ejecutamos la consulta sobre la conexión creada
$rs = mysql_query($sql,$conexion);
// Controlamos si se produce un error SQL
if (mysql_error() != ''){
echo "Se ha producido el error ".mysql_errno()." ".mysql_error();
}
// Pasamos los valores del Conjunto de Registros devuelto a un array asociativo
$campos = mysql_fetch_array($rs);
// Mostramos el contenido de los campos
echo "El resultado de la consulta es: <br>";
echo $campos['usuario']."<br>";
echo $campos['clave']."<br>";
echo $campos['rol']."<br>";
echo $campos['nombre']."<br>";
echo $campos['apellido']."<br>";
// Cerramos la conexion
mysql_close($conexion);
?>
Como pedeis ver hemos hecho uso de las funciones de PHP para cada uno de los procesos que queramos seguir. Las funciones más utilizadas son las siguientes: $conexion=mysql_connect($Servidor,$UsuarioDB,$ClaveDB); $Servidor es la dirección IP o nombre del servidor donde está instalado MySQL, $Usuario y $Clave, las credenciales del usuario para conectarse al servidor. En este caso $conexion almacenará los datos de la conexión para poder ser utilizada después. Por diversas causas puede que no se produzca la conexión. Para controlar esto, usamos la estructura de la líneas 12 a 14. Si se produce algún error, se nos indicará el por qué. Además de conectar, debemos seleccional la Base de Datos sobre la que vamos a trabajar. Para ello usaremos la función mysql_select_db, en la que indicaremos la base de datos mysql_select_db('gestioncontenidos'); Una vez seleccionada, podemos empezar a ejecutar sentencias SQL. Podéis encontrar una chuleta con las sentencias SQL más utilizadas en www.sqldatabasetutorial.com. Estas sentencias las almacenaremos en una variable, como en el línea 21de nuestro código, en forma de String. Un manual muy completo de SQL podemos encontrarlo en W3School. Para que se pueda ejecutar, usaremos la función mysql_query. $rs = mysql_query($sql,$conexion); Esta función nos permite ejecutar la sentencia SQL utilizando la conexión abierta anteriormente. El resultado de la consulta se almacenará en la variable $rs, ya sea uno o un conjunto de varios registros que respondan a nuestros criterios SQL. En caso de producirse un error, también podemos controlarlo y obtener información del mismo con las línas 27 a 29. Ahora ya tenemos la respuesta del servidor en nuestra aplicación, y tenemos que acceder a los datos que llegan. Para eso usamos la función mysql_fetch_array para pasar este contenido al array asociativo $datos en la línea 32. Esta función está esperando que le indiquemos la variable que contiene el conjunto de registros devueltos por la consulta, en nuestro caso $rs. $campos = mysql_fetch_array($rs); Para poder acceder a cada uno de los campos, lo haremos como con cualquier otro array asociativo. En este ejemplo estamos escribiendo el contenido de cada uno de ellos en las líneas 36 a 40. Por último, cerraremos nuestra conexión al servidor mediante mysql_close(), en la línea 43. Es importante este punto, ya que cada conexión consume resursos de nuestro servidor y si no se utilizan, están reservados. Al cerrarla, liberamos estos recursos, lo que redunda en una mejora de rendimiento del mismo. Ahora plantearemos un ejemplo en el que accederemos a un conjunto de registros, no solo a uno, y lo mostraremos en un listado. Listaremos todos los usuarios con rol 2, es decir, los editores de contenidos.
<?php
/* Listado de resgistros */
// Definimos las credenciales del usuario que hace uso de la BD
$UsuarioDB='root';
$ClaveDB='';
$Servidor = 'localhost';
// Conectamos al servidor
$conexion=mysql_connect($Servidor,$UsuarioDB,$ClaveDB);
// Controlamos el error de conexion
if (!$conexion) {
die('No puedo conectar, error : '.mysql_error());
}
// Seleccionamos la BD
mysql_select_db('gestioncontenidos');
// Creamos la sentencia SQL que devuelve todos los campos cuyo rol es Editor
$sql = "SELECT * FROM usuarios WHERE rol= 2";
// Ejecutamos la consulta sobre la conexión creada
$rs = mysql_query($sql,$conexion);
// Controlamos si se produce un error SQL
if (mysql_error() != ''){
echo "Se ha producido el error ".mysql_errno()." ".mysql_error();
}
// Pasamos los valores del Conjunto de Registros devuelto a un array asociativo
echo "El resultado de la consulta es: <br>";
while ($campos=mysql_fetch_array($rs)){
// Mostramos el contenido de los campos
echo $campos['usuario']." ".$campos['clave']." ".$campos['rol']." ".$campos['nombre']." ".$campos['apellido'];
}
// Cerramos la conexion
mysql_close($conexion);
?>
Como vemos, hemos cambiado nuestra SQL en línea 22 y desde ahí nuestro código es el mismo hasta la línea 34. En esta ocasión no tenemos como respuesta un solo registro, sino que llegan un número indeterminado de ellos. Por tanto debemos recurrir a una estructura de control de flujo que nos permita recorrer el conjunto de registros desde el primero al último, y en cada uno de ellos acceder a sus campos y escribir su contenido. while ($campos=mysql_fetch_array($rs)){ Usamos entonces la sentencia while. Con ella recorremos cada uno de los registros que nos llegan en la variable $rs y que van pasando al array asociativo $campos. Dentro de este bucle iremos accediendo en cada iteracción, al contenido de cada campos y escribiéndolos, como se ve en la línea 36. Para la creación del modelo de datos usaremos la siguiente DDL
CREATE TABLE IF NOT EXISTS contenidos ( id int(11) NOT NULL AUTO_INCREMENT, fecha date NOT NULL, titulo varchar(255) NOT NULL, resumen varchar(255) NOT NULL, texto text NOT NULL, usuario varchar(8) NOT NULL, foto varchar(255) NOT NULL, visitas int(11) NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; CREATE TABLE IF NOT EXISTS usuarios ( usuario varchar(8) NOT NULL, clave varchar(8) NOT NULL, rol tinyint(4) NOT NULL, nombre varchar(25) NOT NULL, apellido varchar(25) NOT NULL, PRIMARY KEY (usuario,rol) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; TransaccionesLas transacciones permiten ejecutar un conjunto de sentencias SQL sobre la base de datos y poder deshacerlas si lo necesitamos, en el caso de producirse un error y queramos que estas no tengan efecto. Para ello debemos comenzar el conjunto de sentencias con la palabra BEGIN, seguidas de la ejecución de las SQL necesarias. Si queremos deshacerlas, ejecutaremos un ROLLBACK, si queremos que la ejecución sea permanente, ejecutaremos COMMIT. Para poder hacer uso de esta característica en motor de la tabla debe ser InnoDB.
<?php
/* Gestión de una transaccion */
// Definimos las credenciales del usuario que hace uso de la BD
$UsuarioDB='root';
$ClaveDB='';
$Servidor = 'localhost';
// Conectamos al servidor
$conexion=mysql_connect($Servidor,$UsuarioDB,$ClaveDB);
// Seleccionamos la BD
mysql_select_db('gestioncontenidos');
$error = false;
// Comenzamos las transacciones
$rs = mysql_query("BEGIN",$conexion);
$sql = "INSERT INTO USUARIOS VALUES('pepe','clavepepe')";
$rs = mysql_query($sql,$conexion);
if (mysql_error() != ''){
$error = true;
}
$sql = "INSERT INTO USUARIOS VALUES('pepe',paraerror)";
$rs = mysql_query($sql,$conexion);
if (mysql_error() != ''){
$error = true;
}
// controlamos los errores
if ($error == false){
$rs = mysql_query("COMMIT",$conexion);
else{
$rs = mysql_query("ROLBACK",$conexion);
}
// Cerramos la conexion
mysql_close($conexion);
?>
|
|

Curso PHP y MySQL by José Gómez Castaño is licensed under a Creative Commons Reconocimiento-Compartir bajo la misma licencia 3.0 España License.
Based on a work at www.meridi.es/cursos/php.