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 y por qué usarla?
- Prerrequisitos
- Verificar el Estado Actual de MySQLi
- Instalación de la Extensión MySQLi
- Configuración de PHP (php.ini)
- Reiniciar el Servidor Web
- Verificar la Habilitación Final
- Cerrando Conexiones a la Base de Datos con MySQLi
- Consideraciones sobre Conexiones Persistentes
- Preguntas Frecuentes (FAQs)
- Conclusión
¿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 mysqliEste 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:
mysqliSi 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-mysqliEl 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-mysqliO si usas dnf en versiones más recientes:
sudo dnf install php-mysqliAl 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.

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=mysqliO 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=mysqliGuarda 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 restartO en sistemas más recientes con systemd:
sudo systemctl restart apache2Para Nginx con PHP-FPM:
sudo systemctl restart nginx
sudo systemctl restart php{VERSION_PHP}-fpmReemplaza {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.

<?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étodo | Estilo | Sintaxis para cerrar | Devuelve valor |
|---|---|---|---|
| MySQLi | Procedural | mysqli_close($conexion); | TRUE/FALSE |
| MySQLi | Orientado a Objetos | $conexion->close(); | Ninguno |
| PDO | Orientado 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.

Aprende mas sobre MySQL