Métodos de conexión a MySQL con PHP. Cómo y Cuando deben ser utilizados

PHP dispone de dos métodos de conexión a MySQL recomendados (mysqli y PDO). En esta guía aprenderás cómo y cuando debe ser utilizado cada uno de ellos.

Además de estos dos métodos de conexión a MySQL existe otro método creado originalmente con PHP y aunque se puede ver en códigos antiguos, este ha quedado obsoleto desde PHP 5.5 y eliminado con la llegada de PHP7.

Métodos de conexión recomendados

Existen 2 métodos de conexión a MySQL recomendados con PHP.

  • mysqli (es una extensión de MySQL mejorada, que permite conexiones a MySQL 4.1.3>)
  • PDO (PHP Data Objects) para poder conectar a MySQL y otras bases de datos.

mysqli

La extensión mysqli  permite usar su interfaz (API) de dos formas diferentes:

  • Procedimental (procedural): se invocan funciones para llevar a cabo las tareas.
  • Haciendo uso de Objetos (Orientada a Objetos): se instancia una clase para luego poder invocar sus métodos.

Interfaz procedimental (mysqli)

La interfaz procedimental de mysqli es muy similar en cuanto a su forma de utilización con la antigua interfaz de PHP para conexiones de MySQL (obsoleta).

Es recomendable hacer uso de ella cuando necesitamos migrar las consultas de una aplicación antigua a su versión moderna mysqli.

Por lo que la función mysql_query($sql) se resolvería cambiándola a mysqli_query($sql), la función mysql_fetch_assoc($consulta) se resolvería cambiándola a mysqli_fetch_assoc($consulta), etc …

Veamos un ejemplo de como crear una conexión y una consulta procedimental:

Orientada a Objetos (mysqli)

La interfaz mysqli Orientada a objetos es sencilla y fácil de aprender. Todas sus clases (mysqli, mysqli_stmt, mysqli_result, etc …) tienen sus métodos agrupados y organizados según su uso.

Es recomendable usar mysqli orientado a objetos si estás creando una nueva aplicación; es modulable, fácil de mantener y de reutilizar.

Veamos un ejemplo sencillo de conexión y listado de registros de una tabla usando la API de mysqli orientada a objetos.

Otra de las ventajas que nos ofrece mysqli es que permite realizar consultas preparadas para así ejecutar sentencias SQL repetidamente.

Una sentencia preparada envía una plantilla con la consulta SQL para que el servidor compruebe que la sintaxis es correcta y a continuación realiza la ejecución de la consulta con los valores que le vayamos asignando.

Los variables agregadas usando bind_param(), pueden ser de tipo s (cadena), i (entero), d (doble) y b (blob).

PDO (PHP Data Objects)

El driver PDO para MySQL está desarrollado en PHP y además de conectar con bases de datos MySQL, permite conectar a otras motores de Bases de Datos (odbc, firebird, sqlite, sqlsrv, oci, pgsql, etc …).

Para comprobar los controladores disponibles de tu servidor ejecuta:

PDO está compuesta por 3 clases:

  • PDO, es la clase encargada de la conexión con la Base de Datos, transacciones e instancias de la la clase PDOStatement.
  • PDOStatement, es la clase que controla las sentencias preparadas de SQL y es la encargada de devolver los resultados.
  • PDOException, es la clase que se encarga del control de errores.

Una conexión PDO se inicia creando una instancia de la clase PDO, la cual permanece activa hasta que es finalizada o destruida por el usuario.

Una de las ventajas de PDO es que puede crear conexiones persistentes que son almacenadas en cache. De esta manera se evita la carga de tener que realizar una nueva conexión a la Base de Datos.

Veamos un sencillo ejemplo de conexión a una base de datos MySQL haciendo uso de PDO

Para controlar los reportes de errores, configuraciones de columnas, tiempos de espera, etc … asignaremos atributos. Puedes consultar que atributos asignar siguiendo este enlace.

PDO también permite hacer uso de consultas sql preparadas, que serán ejecutadas por el método execute() a través de la clase PDOStatement. Las sentencias pueden contener tantos parámetros como deseemos y podemos hacer uso de ellos con dos sintaxis diferentes:

  • mediante marcadores utilizando nombres (:name)
  • con marcadores posicionales mediante el uso de signos de interrogación (?) al igual que con mysqli.

Siempre que una sentencia preparada se ejecuta con éxito, esta devolverá un objeto PDOStatement y en caso contrario devolverá una objeto PDOException.

Veamos un sencillo ejemplo de una consulta preparada con asignación de nombres:

No siempre necesitamos hacer uso de consultas preparadas, por lo que podemos usar la clase PDO directamente a través de sus métodos query() o exec(). El primero lo usaremos para realizar consultas (select) y el segundo para consultas (insert, update, delete) ya que nos proporciona información con el número de filas que han sido afectadas.

Aún así es mejor ver como funcionan cada uno de ellos con unos ejemplos:

 

Deja una respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.