Leo frecuentemente comentarios como:
Al guardar la conexión a MySQL usando serialize y unserialize me da errores
O
Nadie quiere tener que abrir una nueva conexión a la base de datos cada vez que se ejecuta una página PHP. Share on XGuardo la conexión a la BD en una variable de sesión pero después cuando consulto ese valor desde otra página no existe
En un contexto de alta concurrencia esto puede suponer un gran desperdicio de recursos e incluso convertirse en un cuello de botella.
Sin embargo, la solución no es guardar la conexión dentro de la sesión… de hecho, eso no va a funcionar.
Se trata de un caso muy particular, pero existe una alternativa.
Qué son las conexiones permanentes a MySQL
En el uso normal de las conexiones a MySQL (usando, por ejemplo mysqli_connect
), al finalizar la ejecución del script se cierran automáticamente las conexiones que hayan sido abiertas.
Si tenemos en cuenta el modelo de ejecución de php notaremos que habrá un gran overhead con toda esa apertura/cierre de conexiones.
Para evitar este problema PHP dispone de conexiones permanentes.
Se trata de conexiones que, a diferencia de las comunes, continúan existiendo luego de que el script ha finalizado su ejecución.
Cómo se crean conexiones permanentes de PHP a MySQL
En general, existen dos modos de vincular PHP y MySQL:
La principal diferencia entre ellas es que MySQLi es una librería específica (es decir, sólo puede trabajar con MySQL) mientras que PDO es genérica (Puede trabajar con diferentes motores de bases de datos).
Ya que estamos hablando de MySQL en este post voy a explorar el uso de MySQLi.
La forma de crear una conexión persistente es simple, sólo se necesita agregar antes del nombre del host el string p:
ejemplo:
<?php $conn = mysqli_connect("p:localhost", "root", "rootpwd");
¡Y listo! Con este sencillo código puedes olvidarte del problema de abrir y cerrar conexiones a MySQL en cada script de tu sitio.