Cómo compartir la conexión a MySQL entre scripts PHP

Leo frecuentemente comentarios como:

Al guardar la conexión a MySQL usando serialize y unserialize me da errores

O

Guardo 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

Nadie quiere tener que abrir una nueva conexión a la base de datos cada vez que se ejecuta una página PHP. Clic para tuitear

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:

  1. MySQLi
  2. PDO

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.

mchojrin

Por mchojrin

Ayudo a desarrolladores PHP a acceder mercados y clientes más sofisticados y exigentes

¿Te quedó alguna duda? Publica aca tu pregunta

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