> Manuales > Manual de PHP

Explicamos cómo hacer la migración del código PHP antiguo para acceso a bases de datos MySQL / MariaDB, donde antes se usaban las extensiones de mysql, para usar las extensiones recomendadas actualmente con mysqli.

Actualización de funciones PHP para acceso a MySQL

Este artículo se publicó cuando convivían los métodos antiguo y nuevo de las funciones de MySQL, allá por PHP 5. Actualmente las funciones de conexión a MySQL denominadas "mysqli" ya no son tan nuevas y son obligatorias en todos los casos. Las funciones de conexión con las bases de datos MySQL antiguas además de estar obsoletas, actualmente ya ni funcionan, por lo que tenemos que usar siempre las funciones de "mysqli".

Todos los artículos de trabajo con bases de datos en el Manual de PHP de desarrolloweb se han actualizado para usar siempre las funciones nuevas, por lo que has aprendido con las funciones actuales.

Además, cabe decir también que actualmente se recomiendan las funciones de mysqli basadas en clases y objetos, por lo que, aunque haya dos versiones de estas funciones, es importante usar las basadas en objetos, ya que nos garantiza que no se quede obsoleto nuestro código en un futuro.

Este artículo lo dejaremos como una guía para las personas que necesiten actualizar su código antiguo de conexión con la base de datos desde la interfaz antigua "mysql" a "mysqli".

PHP está en constante evolución y prueba de ello son las novedades que venimos a comentar en este artículo. Se trata de las nuevas funciones de acceso a bases de datos MySQL que están disponibles desde PHP 5, con nombres diferentes a las funciones disponibles en el pasado y que también tienen algunos cambios en el modo de trabajar. Las nuevas funciones están creadas para dar respuesta a diversas mejoras que el sistema gestor de bases de datos MySQL ha incorporado recientemente.

Este es un tema fundamental, sobre todo para las personas que conocen PHP desde hace tiempo, que como yo, estábamos acostumbrados a usar un juego de funciones que a día de hoy se encuentra obsoleto y que no se recomienda utilizar. Realmente, en el momento de escribir este artículo las funciones de MySQL antiguas todavía, se pueden usar, pero la previsión es que se eliminen en PHP 5.5, por lo que resulta imprescindible actualizar nuestros conocimientos.

Afortunadamente, es bastante sencillo el paso a las nuevas funciones de MySQL, puesto que el esquema de funcionamiento es prácticamente el mismo, así como los nuevos nombres de funciones, que tienen muy pocas variaciones. Por lo tanto, si te has leído el Manual de PHP de DesarrolloWeb.com y has aprendido con nosotros a trabajar con las bases de datos, no tendrás realmente muchos problemas en aprender las novedades que paso a relatar a continuación.

Dos tipos de funciones para acceso a las bases de datos MySQL

Una de las novedades que PHP nos ofrece en las recientes funciones de PHP es la incorporación de dos tipos aproximaciones al trabajo con MySQL, que ahora se puede hacer por procedimientos (funciones normales de toda la vida) y por objetos.

Nota: Antes sólo podíamos acceder a MySQL por funciones comunes, pero ahora también podemos acceder por medio de clases y objetos de programación orientada a objetos (POO). La incorporación en el API de métodos basados en POO hace patente que PHP está teniendo muy presente este paradigma de desarrollo dentro de su núcleo y que la tendencia en las nuevas versiones de PHP será la de potenciarlo aun más.

Funciones basadas en procedimientos

Como venimos haciendo toda la vida con PHP. Funciones normales y corrientes, que reciben parámetros y que devuelven valores.

Funciones basadas en POO

Realmente son constructores para obtener objetos y métodos a los que podemos acceder dentro de esos objetos para realizar las operaciones con la base de datos.

Hay que aclarar que ambas aproximaciones son perfectamente válidas y que no cambian las cosas que se pueden hacer desde una u otra. Por tanto, decantarnos por uno u otro modo no implicará ninguna ventaja en funcionalidad, ni tan siquiera de rendimiento. De hecho, ambos modos de trabajo son el "mismo perro con distinto collar". Por tanto, es tan válida una elección como la otra y nuestra preferencia será más bien por gustos o costumbres a la hora de desarrollar.

ACTUALIZACIÓN: En estos momentos se recomienda usar las funciones de mysql basadas enobjetos en lugar de las basadas en funciones. Quizás en un futuro se desactive la interfaz basada en funciones.

Nota: Lo que no se recomienda es en un mismo proyecto cambiar de uno a otro estilo de acceso a base de datos MySQL de manera arbitraria. Debemos tener en cuenta que realmente esa recomendación no es debido a que no te vaya a funcionar tu programa, o puedas tener algún problema determinado, sino más bien es una cuestión de estilo y claridad a la hora de mantener el código de tu proyecto.

Acceso a MySQL con funciones por procedimientos

En el mencionado Manual de PHP venimos ofreciendo ejemplos para acceso a base de datos con funciones de toda la vida. Por eso, en este artículo vamos a mostrar las diferencias que existen con respecto a las funciones antiguas, usando también código por procedimientos. Sin embargo, como verás a continuación, las funciones son prácticamente las mismas a las que se les ha agregado una "i". Por ejemplo, mysql_connect() pasa a ser mysqli_connect(). Los parámetros son los mismos en muchos casos, o muy parecidos.

Nota: este artículo no es un tutorial de acceso a bases de datos con PHP, para eso ya disponemos del manual de PHP en DesarrolloWeb.com. Realmente se trata de una serie de guías para poder reciclar nuestros conocimientos con el PHP de versiones anteriores.

Conexión con la base de datos: mysqli_connect()

Ahora indicamos también la base de datos a la que queremos conectarnos. Y atención, porque lo que nos devuelve la función no es un link o identificador de la conexión con la base de datos, sino un objeto. Pero aunque no sepas POO, no te preocupes por este detalle, pues poco nos importa a los desarrolladores, dado que vamos a usar ese objeto como si fuera simplemente el identificador de la conexión, o sea, vamos a usarlo como hacíamos anteriormente en PHP.

$conexion = mysqli_connect("localhost", "usuario", "clave", "mi_bbdd");

Cerrar la conexión: mysqli_close()

Tenemos que pasarle como parámetro siempre el objeto que obtuvimos al iniciar la conexión.

mysqli_close($conexion);

Ejecutar una consulta: mysqli_query()

Esta función es exactamente igual, aunque en este caso recibe obligatoriamente como primer parámetro el objeto de conexión a la base de datos que recibimos al conectarnos. El segundo parámetro es la sentencia SQL que se desea ejecutar en MySQL.

$resultado = mysqli_query($conexion, "select * from cliente");

Otro aspecto interesante es que nos devuelve un valor que puede ser, o bien un booleano para saber si la consulta se ejecutó con éxito, como en el caso de un "insert" o "delete", o bien un objeto resultado con un conjunto de registros en el caso de un "select".

Extraer un registro del conjunto de resultados: mysqli_fetch_array()

Esta función es exactamente igual, recibe el conjunto de resultados del que queremos sacar un registro. Devuelve en este caso un "array", pero está igualmente mysqli_fetch_object() que devolvería un objeto.

$fila = mysqli_fetch_array($resultado);

Contar el número de filas de un resultado: mysqli_num_rows()

También es exactamente igual, simplemente le pasamos el objeto conjunto de registros del que queremos saber el número de filas o registros que contiene.

$fila = mysqli_num_rows($resultado)

Conclusión

En general, como estás pudiendo comprobar, el sistema no varía mucho de lo que ya conoces en el pasado. Cambian nombres de funciones mínimamente y algún parámetro suelto aquí y allí.

Creo que el paso para usar las nuevas funciones MySQL es tan rápido que no tiene sentido seguir usando las funciones antiguas y además en breve el cambio será obligado porque los accesos antiguos que hacíamos a MySQL dejarán de funcionar.

Miguel Angel Alvarez

Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...

Manual