mayo 26, 2013

PHP y MySQL: Conectando por funciones

PHP está constantemente implementando mejoras que se evidencian en cada una de sus versiones, en este momento su versión estable es 5.4 y ya se espera pronto la versión 5.5 finalizada.

Una de las cosas que han tenido presente es el entorno de Programación Orientada a Objetos (OOP) y de manera particular deseo mencionar en lo que tiene que ver con conexiones a bases de datos (no solo MySQL).

Ahora además de usar las clásicas funciones para conectar a la BD también es posible establecer la conexión mediante usar clases y objetos, sobre esto último lo dejaremos para otra entrada y nos centraremos aquí con las sencillas funciones a las que debemos invocar, les damos parámetros y nos devuelven valores.

La razón de esto es que incluso las funciones han sufrido muy ligeros cambios a partir de PHP 5.0, y aunque aún son válidas las “viejas” funciones estas serán eliminadas en versiones posteriores, así que mientras vemos algunos ejemplos recordemos que iré mencionando la forma “antigua” y la forma “nueva” de hacerlo desde PHP 5.5 en adelante.

¿Cómo saber que versión de PHP tenemos? Pues ejecute un demo con:

<?php echo phpinfo(); ¿>

Aunque en la página principal de su servidor posiblemente allí encuentre un enlace a “phpinfo()” y hallará el valor de su versión instalada.

Conectar con MySQL

Considerando este como un tutorial de “iniciación” no entraré a comentar todos los detalles, así que vamos directamente al punto de interés.

  1. mysql_connect(“nombre_servidor”, “nombre_usuario”, “clave_usuario”);
    Esta forma será eliminada en alguna próxima versión de PHP, si no se usa una clave de usuario como ocurre con WampServer, se podría usar estas dos maneras:
    mysql_connect(“nombre_servidor”, “nombre_usuario”, “”)
    mysql_connect(“nombre_servidor”, “nombre_usuario”)

    Esta forma abre una conexión al servidor MySQL y devuelve un identificador del enlace si logra la conexión, en caso contrario devuelve el valor “FALSE” (de esta forma necesitaremos una función adicional para conectar a la base de datos).
  2. mysqli_connect(“nombre_servidor”, “nombre_usuario”, “clave_usuario”, “nombre_bd”);
    Esta es la forma recomendada para PHP 5 en adelante, además de la “i” agregada al nombre de la función acepta un parámetro adicional que es el nombre de la base de datos. Esta forma también abre una conexión pero devuelve un objeto que representa la conexión al servidor MySQL, sin embargo, trataremos este objeto tal como se hace con el identificador de la forma “antigua”.

Si nuestro servidor es “localhost”, el usuario es “root”, la contraseña es “abcd” y la base de datos se llama “mibd”, entonces la conexión de la forma anterior sería:

$identificador = mysql_connect(“localhost”, “root”, “1234”);

Y la nueva forma sería:

$identificador = mysqli_connect(“localhost”, “root”, “1234”, “mibd”);

Desconectar

Asumamos que hemos establecido la conexión #$identificador”, para cerrarla (y liberar recursos) usamos en la forma anterior:

mysql_close($identificador);

Nota: No pretendo profundizar aquí en persistencias, pero esto no es necesario en las conexiones no persistentes ya que se cierran al terminar de ejecutar el script, puede investigar esto como “mysql_pconnect()”.

Para la nueva forma usamos:

mysqli_close($identificador);

En ambas formas devuelve “TRUE” si logra cerrar la conexión o “FALSE” en caso contrario.

Seleccionar la Base de Datos

Esto es válido para la forma “antigua” forma ya que la “nueva” incluye un cuarto parámetro para apuntar a la base de datos. Una vez que nos hemos establecido la conexión al servidor con “mysql_connect()” seleccionemos la base de datos “midb” de esta forma:

$identificador = mysql_connect(“localhost”, “root”, “1234”);
$mi_base_datos = mysql_select_db(“midb”, $identificador);

Nota: En realidad si existe la operación “mysqli_select_db()”, pero, debería usarse para cambiar la base de datos con la que trabajamos.

Operaciones: Insert, Delete y Update

Para estas operaciones necesitamos una de las tres sentencias según necesitemos agregar, eliminar o modificar un registro de datos, sin importar cuál de ellas usemos la sintaxis es la misma, asumamos que deseamos eliminar de la tabla “alumnos” el registro que en el campo “idalumno” tiene el valor “5”, la forma “anterior”:

$identificador = mysql_connect(“localhost”, “root”, “1234”);
$mi_base_datos = mysql_select_db(“midb”, $identificador);
$cadena_sql = “Delete From alumnos Where idalumno = 5”;
$resultado = mysql_query($cadena_sql, $identificador);

Recordemos que “$cadena_sql” podría ser cualquiera de las otras operaciones SQL. La “nueva forma será:

$identificador = mysqli_connect(“localhost”, “root”, “1234”, “midb”);
$cadena_sql = “Delete From alumnos Where idalumno = 5”;
$resultado = mysqli_query($identificador, $cadena_sql);

Además de la “i” adicional notemos que el orden de los parámetros es el contrario, primero el enlace identificador y luego la cadena SQL.

De ambas formas nos devolverá “TRUE” o “FALSE” según la operación se realizó de forma exitosa o no.

SELECT

En realidad el procedimiento a ejecutar es el mismo que para las tres operaciones anteriores, pero, se necesitarán instrucciones adicionales para escribir los datos recuperados, operación que no es necesaria con las otras tres operaciones.

Puesto que SELECT nos devolverá un juego de registros, debemos leer y escribir uno a uno, para ello usaremos dos cosas, primero un bucle para desplazarnos por las filas respectivas (usaré while) y una función para ir leyendo cada fila a la vez (mysql_fetch_assoc()).

Esta vez asumimos que la tabla “alumnos” tiene los campos “idalumno”, “nombreapellido” y “fechanacimiento”, la forma anterior será:

$identificador = mysql_connect(“localhost”, “root”, “1234”);
$mi_base_datos = mysql_select_db(“midb”, $identificador);
$resultado = mysql_query(“Select * From alumnos” , $identificador);
while($registro = mysql_fetch_assoc($resultado)){
   echo $registro[“idalumno”] . ” – “;
   echo $registro[“nombreapellido”] . “ - ”;
   echo $registro[“fechanacimiento”] . “<br />”;
}

La variable $resultado es en realidad un array que contiene “sub-arrays” (esa palabra no existe) cada sub-array contiene los datos de una fila en la tabla, el array $resultado contiene la tabla. Para leer cada fila usamos mysql_fetch_assoc(), esta función además de leer el sub-array mueve el puntero a la fila siguiente hasta finalizar, para repetir este paso hasta finalizar usamos el bucle while.

La “nueva” forma seguirá la misma lógica con mysqli_fetch_assoc():

$identificador = mysqli_connect(“localhost”, “root”, “1234”, “midb”);
$cadena_sql = “Delete From alumnos Where idalumno = 5”;
$resultado = mysqli_query($identificador, $cadena_sql);
while($registro = mysqli_fetch_assoc($resultado)){
echo $registro[“idalumno”] . ” - “;
echo $registro[“nombreapellido”] . “ - ”;
echo $registro[“fechanacimiento”] . “<br />”;
}

Las funciones mysql_fetch_assoc() y mysqli_fetch_assoc() devolverán FALSE al llegar a la última fila lo que detendrá el bucle while.

Liberando Recursos con mysql_free_result()

Para concluir, al haber realizado una consulta e ir trabajando con datos se está haciendo uso de determinada cantidad de memoria, a mayor sea la cantidad de datos sería mejor asegurarnos de irla liberando, para eso tenemos las funciones mysql_free_result() y mysqli_free_result().

En ambos casos se le pasa como parámetro el recurso a liberar (por ejemplo en el ejercicio anterior le pasaríamos $resultado) y devolverá TRUE o FALSE según tenga éxito o no la operación.

Vistas

He preparado un ejercicio local usando Wampserver y comparto la vista del código usando ambas formas:

image

Y el resultado en el navegador:

image

Enlaces a temas relacionados

  1. Manual de PHP http://www.desarrolloweb.com/manuales/12/
  2. Instalar Apache, MySQL y PHP con AppServer http://eliotnet.blogspot.com/2012/05/appserv-en-windows-apache-mysql-php.html
  3. Crear tu base de datos con phpMyAdmin http://primeraweb.wordpress.com/2012/01/02/conociendo-phpmyadmin-parte-i-tu-primera-base-de-datos/
  4. Función para mensajes de error http://phpmanuals.net/es/function.mysql-error.html

No hay comentarios.:

Publicar un comentario

Tu comentario