¿Qué es MySQL en PHP con un ejemplo?

Habilitar MySQLi en PHP: Guía Completa

Valoración: 4.03 (2283 votos)

Conectar una aplicación web desarrollada en PHP a una base de datos MySQL es una tarea fundamental para la mayoría de los proyectos dinámicos. Para lograr esta comunicación de manera eficiente, segura y con soporte para características modernas de MySQL, la extensión MySQLi es la opción recomendada. A diferencia de la antigua extensión MySQL (ahora obsoleta), MySQLi ofrece mejoras significativas, incluyendo soporte para programación orientada a objetos y sentencias preparadas, cruciales para prevenir ataques de inyección SQL.

Habilitar MySQLi en tu entorno PHP es un paso esencial para empezar a interactuar con tus bases de datos de forma robusta. Este proceso implica verificar su estado actual, instalarla si es necesario y configurar PHP para que la cargue correctamente. A menudo, la extensión ya viene preinstalada con PHP, pero es vital saber cómo asegurarte de que está activa y lista para usar.

¿Qué es mysqli_connect en PHP?
mysqli_connect sirve como puerta de enlace para establecer una conexión entre un script PHP y un servidor de bases de datos MySQL . Esta conexión permite a los desarrolladores realizar diversas operaciones de base de datos, como consultar datos, insertar nuevos registros, actualizar entradas existentes, etc.
Índice de Contenido

¿Qué es MySQLi y por qué usarla?

MySQLi (MySQL Improved) es una extensión de PHP diseñada específicamente para interactuar con bases de datos MySQL. Proporciona una interfaz mejorada en comparación con su predecesora, la extensión MySQL original. Sus principales ventajas radican en:

  • Soporte Dual: Puedes usarla tanto con un estilo de programación orientado a objetos como con un estilo procedural, adaptándose a tus preferencias de codificación.
  • Sentencias Preparadas: Ofrece soporte nativo para sentencias preparadas, lo cual es fundamental para proteger tu aplicación contra ataques de inyección SQL, ya que separa la lógica de la consulta de los datos.
  • Mayor Rendimiento: Incluye soporte para nuevas características de MySQL 4.1 y posteriores, a menudo resultando en un rendimiento mejorado.
  • Funcionalidades Avanzadas: Soporte para transacciones, múltiples sentencias y otras características avanzadas de MySQL.

Utilizar MySQLi es un estándar de facto para la conexión segura y eficiente entre PHP y MySQL.

Prerrequisitos

Antes de proceder a habilitar la extensión MySQLi, necesitas tener instalados en tu sistema:

  • PHP: La extensión MySQLi es parte del ecosistema de PHP, por lo que una instalación funcional de PHP es indispensable.
  • Servidor MySQL: Necesitas un servidor MySQL (o MariaDB, que es un fork compatible) en funcionamiento al que te quieras conectar.

Estos componentes suelen instalarse utilizando el gestor de paquetes de tu sistema operativo. Por ejemplo, en sistemas basados en Debian (como Ubuntu) o Red Hat (como CentOS/AlmaLinux/Rocky Linux), los comandos suelen ser sencillos.

Verificar el Estado Actual de MySQLi

Es posible que MySQLi ya esté habilitada en tu instalación de PHP. Puedes verificar esto fácilmente desde la línea de comandos o a través de un script PHP.

Desde la Línea de Comandos

Abre tu terminal y ejecuta el siguiente comando:

php -m | grep mysqli

Este comando lista todos los módulos (extensiones) de PHP cargados y filtra la salida para encontrar la palabra 'mysqli'. Si 'mysqli' aparece en la salida, significa que la extensión está cargada para la interfaz de línea de comandos (CLI) de PHP. La salida esperada sería simplemente:

mysqli

Si la salida está vacía, la extensión no está habilitada para la CLI.

Desde un Script PHP (para el Servidor Web)

La configuración de PHP para el servidor web (Apache, Nginx, etc.) puede ser diferente a la de la CLI. Para verificar el estado de MySQLi en el entorno del servidor web, puedes crear un archivo PHP simple.

Crea un archivo llamado info.php (o cualquier otro nombre) en el directorio raíz de tu servidor web (comúnmente /var/www/html en muchos sistemas Linux) con el siguiente contenido:

<?php
phpinfo();
?>

Guarda el archivo y accede a él desde tu navegador (por ejemplo, http://localhost/info.php). Busca la sección titulada 'mysqli'. Si esta sección existe y muestra detalles sobre la extensión, significa que MySQLi está habilitada y cargada por tu servidor web. Si no encuentras esta sección, la extensión no está habilitada para el servidor web.

Instalación de la Extensión MySQLi

Si la verificación anterior mostró que MySQLi no está habilitada, deberás instalarla. La forma más común es usar el gestor de paquetes de tu sistema operativo.

En Sistemas Basados en Debian (Ubuntu, Mint, etc.)

sudo apt update
sudo apt install php-mysqli

El nombre del paquete puede variar ligeramente dependiendo de la versión de PHP instalada. Por ejemplo, podría ser php7.4-mysqli o php8.0-mysqli. Si no estás seguro, puedes buscar los paquetes disponibles con apt search mysqli.

En Sistemas Basados en Red Hat (CentOS, AlmaLinux, Rocky Linux, Fedora)

sudo yum install php-mysqli

O si usas dnf en versiones más recientes:

sudo dnf install php-mysqli

Al igual que con apt, el nombre del paquete podría incluir la versión de PHP (ej. php-mysqlnd a menudo incluye mysqli, o podría ser php81-php-mysqli dependiendo del repositorio).

Después de ejecutar el comando de instalación, el gestor de paquetes descargará e instalará la extensión.

Configuración de PHP (php.ini)

Una vez instalada la extensión, a veces es necesario asegurarse de que PHP está configurado para cargarla. Esto se hace modificando el archivo de configuración principal de PHP, llamado php.ini.

¿Puedo usar PHP con MySQL?
Con PHP, puedes conectarte a bases de datos y manipularlas. MySQL es el sistema de bases de datos más popular para PHP .

La ubicación de php.ini puede variar dependiendo de cómo se instaló PHP y si estás configurando PHP para la CLI o para el servidor web. Las ubicaciones comunes incluyen:

  • Para PHP CLI: /etc/php/{VERSION_PHP}/cli/php.ini
  • Para PHP con Apache: /etc/php/{VERSION_PHP}/apache2/php.ini
  • Para PHP-FPM (usado con Nginx o Apache): /etc/php/{VERSION_PHP}/fpm/php.ini

Reemplaza {VERSION_PHP} con tu versión de PHP (ej. 7.4, 8.1).

Si no encuentras la ubicación exacta, puedes usar el comando php -i | grep "php.ini" para que PHP te diga dónde busca su archivo de configuración:

php -i | grep "php.ini"

La salida te mostrará la ruta del archivo de configuración cargado.

Una vez que localices el archivo php.ini relevante (el del servidor web si usas Apache/Nginx), ábrelo con un editor de texto (requerirás permisos de superusuario, por ejemplo, usando sudo nano /ruta/a/tu/php.ini).

Dentro del archivo, busca la línea que menciona la extensión MySQLi. Esta línea generalmente se ve así:

;extension=mysqli

O a veces:

;extension=php_mysqli.dll (más común en Windows, pero puede aparecer)

El punto y coma (;) al inicio de la línea indica que está comentada y, por lo tanto, no se carga. Para habilitar la extensión, simplemente elimina el punto y coma:

extension=mysqli

Guarda los cambios en el archivo php.ini.

Importante: Siempre haz una copia de seguridad de tus archivos de configuración antes de modificarlos.

Reiniciar el Servidor Web

Después de modificar el archivo php.ini, es crucial reiniciar tu servidor web (o el servicio PHP-FPM) para que los cambios surtan efecto. Los pasos varían según el servidor web que estés utilizando:

Para Apache:

sudo service apache2 restart

O en sistemas más recientes con systemd:

sudo systemctl restart apache2

Para Nginx con PHP-FPM:

sudo systemctl restart nginx
sudo systemctl restart php{VERSION_PHP}-fpm

Reemplaza {VERSION_PHP} con la versión de PHP-FPM que estés usando (ej. php7.4-fpm, php8.1-fpm).

Verificar la Habilitación Final

Una vez reiniciado el servidor, repite el paso de verificación. Accede nuevamente al script info.php en tu navegador (http://localhost/info.php) y busca la sección 'mysqli'. Si la extensión se cargó correctamente, deberías ver todos sus detalles de configuración. Si no la ves, revisa los pasos anteriores: ¿instalaste el paquete correcto? ¿Editaste el php.ini adecuado para el entorno del servidor web? ¿Reiniciaste el servicio correcto?

Cerrando Conexiones a la Base de Datos con MySQLi

Una vez que has habilitado y utilizado MySQLi para conectar con tu base de datos, es una buena práctica cerrar la conexión cuando ya no la necesitas. Aunque PHP suele cerrar automáticamente las conexiones al finalizar el script, cerrarlas explícitamente libera recursos del servidor de base de datos más pronto y ayuda a mantener el control sobre el número de conexiones activas.

MySQLi ofrece diferentes formas de cerrar una conexión, dependiendo de si estás utilizando el estilo procedural o el orientado a objetos.

Estilo Procedural

Si utilizas las funciones procedurales de MySQLi (por ejemplo, mysqli_connect()), cierras la conexión usando la función mysqli_close(). Esta función toma como argumento el enlace de conexión que obtuviste al conectar.

<?php
$conexion = mysqli_connect("localhost", "usuario", "contraseña", "basedatos");

// Verificar conexión
if (!$conexion) {
die("Error de conexión: " . mysqli_connect_error());
}

// ... realizar operaciones con la base de datos ...

// Cerrar la conexión
mysqli_close($conexion);
?>

La función mysqli_close() devuelve TRUE en caso de éxito y FALSE en caso de error.

Estilo Orientado a Objetos

Si prefieres el enfoque orientado a objetos (utilizando new mysqli()), cierras la conexión llamando al método close() del objeto de conexión.

¿Qué función se utiliza para conectar una base de datos en PHP?
Función PHP mysqli_connect() La función mysqli_connect() de PHP se utiliza para establecer una conexión con una base de datos MySQL. Esta función inicia una conexión con el servidor MySQL y devuelve un objeto de conexión en caso de éxito o de fallo (FALSE).
<?php
$conexion = new mysqli("localhost", "usuario", "contraseña", "basedatos");

// Verificar conexión
if ($conexion->connect_error) {
die("Error de conexión: " . $conexion->connect_error);
}

// ... realizar operaciones con la base de datos ...

// Cerrar la conexión
$conexion->close();
?>

Este método no devuelve un valor.

Comparativa de Cierre de Conexiones (MySQLi vs. PDO)

Aunque este artículo se centra en MySQLi, es útil saber cómo se comparan los métodos de cierre con otra extensión popular para bases de datos en PHP, PDO (PHP Data Objects). PDO utiliza un enfoque diferente para cerrar la conexión, que es simplemente eliminar la referencia al objeto de conexión.

MétodoEstiloSintaxis para cerrarDevuelve valor
MySQLiProceduralmysqli_close($conexion);TRUE/FALSE
MySQLiOrientado a Objetos$conexion->close();Ninguno
PDOOrientado a Objetos$conexion = null;Ninguno

En el caso de PDO, al asignar null a la variable que contiene el objeto de conexión, se libera el objeto y PHP cierra automáticamente la conexión asociada.

Consideraciones sobre Conexiones Persistentes

Existe una característica en MySQLi (y en otras extensiones) llamada conexiones persistentes. Estas conexiones no se cierran al finalizar el script, sino que permanecen abiertas en el proceso del servidor web para ser reutilizadas por scripts subsiguientes. Se especifican prefijando el host con 'p:' (ej. mysqli_connect("p:localhost", ...)).

Si bien las conexiones persistentes pueden reducir la sobrecarga de establecer una nueva conexión para cada solicitud, también pueden tener desventajas si no se gestionan correctamente, como el uso excesivo de recursos en el servidor de base de datos si hay muchos procesos PHP y usuarios de base de datos diferentes. Generalmente, para la mayoría de las aplicaciones web, las conexiones no persistentes son suficientes y más fáciles de gestionar.

Preguntas Frecuentes (FAQs)

Aquí respondemos algunas preguntas comunes relacionadas con la habilitación y uso de MySQLi:

¿Qué hago si php -m | grep mysqli no muestra nada después de instalar y reiniciar?

Verifica la ubicación de tu archivo php.ini usando php -i | grep "php.ini". Asegúrate de que has editado el archivo correcto (especialmente si tienes diferentes configuraciones para CLI y el servidor web). Confirma que la línea extension=mysqli no tiene un punto y coma al inicio y que el nombre de la extensión es correcto (a veces es php_mysqli.dll en Windows o el nombre del archivo .so en Linux). Asegúrate de haber reiniciado el servicio correcto (Apache, Nginx, o PHP-FPM).

¿Necesito instalar MySQLi por separado si ya instalé PHP y MySQL?

Generalmente, al instalar PHP y los paquetes de base de datos relacionados (como php-mysql o php-mysqlnd), MySQLi se incluye por defecto. Sin embargo, en algunas distribuciones o configuraciones personalizadas, es posible que necesites instalar el paquete php-mysqli explícitamente, como se mostró en los pasos de instalación.

¿Cuál es la diferencia entre php-mysql y php-mysqli?

php-mysql es la extensión antigua y obsoleta para interactuar con MySQL. php-mysqli es la extensión mejorada y recomendada. Siempre debes usar php-mysqli para nuevos desarrollos.

¿Por qué es importante cerrar la conexión a la base de datos?

Cerrar la conexión libera los recursos (memoria, hilos) que la conexión estaba utilizando tanto en el lado de PHP como en el servidor MySQL. Aunque PHP lo hace automáticamente al finalizar el script, cerrarla explícitamente es una buena práctica para gestionar recursos, especialmente en scripts largos o en aplicaciones que podrían mantener conexiones abiertas innecesariamente.

¿MySQLi protege automáticamente contra inyección SQL?

No, MySQLi por sí sola no protege contra inyección SQL. Lo que sí hace es proporcionar las herramientas necesarias, como las sentencias preparadas (prepared statements), que son el mecanismo para prevenir la inyección SQL. Debes utilizar activamente las sentencias preparadas en tu código para beneficiarte de esta protección.

Conclusión

Habilitar la extensión MySQLi en PHP es un paso fundamental para desarrollar aplicaciones web que interactúen de manera segura y eficiente con bases de datos MySQL. Hemos cubierto los pasos necesarios para verificar su estado, instalarla si es preciso, configurarla a través del archivo php.ini y verificar que se ha cargado correctamente tras reiniciar el servidor web. Además, comprendimos la importancia de gestionar las conexiones a la base de datos y aprendimos los métodos para cerrarlas explícitamente usando MySQLi, tanto en su estilo procedural como orientado a objetos. Dominar estas técnicas te permitirá construir aplicaciones más robustas y seguras.

Si quieres conocer otros artículos parecidos a Habilitar MySQLi en PHP: Guía Completa puedes visitar la categoría Bases de datos.

Ivan

Soy un entusiasta de la tecnología con especialización en bases de datos, particularmente en MySQL. A través de mis tutoriales detallados, busco desmitificar los conceptos complejos y proporcionar soluciones prácticas a los desafíos cotidianos relacionados con la gestión de datos

Aprende mas sobre MySQL

Subir