datos - Obtener una conexión PHP PDO desde mysql_connect()?
conexion mysql php 7 (2)
Ambas extensiones usan internamente EG (persistent_list) para almacenar el identificador de conexión persistente. Pero crean diferentes hash / claves para esta lista, por lo que no pueden encontrar entradas de la otra extensión respectiva.
La extensión mysql crea claves de la forma "mysql_<host&port>_<user>..."
mientras que pdo construye "PDO:DBH:DSN=<dsn>:<user>:...."
. Los hashes se usan casi como matrices en un script php. Ejemplo (excesivamente) simplificado:
function pconnect($host,$user,$pass) {
global $persistent_list;
$hashkey = sprintf("extensionname_%s_%s_%s", $host, $user, $pass);
if ( isset($persistent_list[$hashkey]) ) {
// use stored connection
}
else {
// create new connection
}
}
Entonces la respuesta es: No, las conexiones no serán compartidas y reutilizadas por la extensión mysql y PDO.
Tengo una aplicación PHP / MySQL heredada que llama a mysql_connect (). Toneladas de código descendente existente realiza llamadas mysql_query()
, directamente o a través de wrappers, utilizando esta conexión.
Para el código nuevo que desarrollo en la aplicación, me gustaría comenzar a usar PDO.
Si hago una conexión PDO utilizando las mismas credenciales de host / usuario / pass / dbname, ¿podría ser tan afortunado que, bajo el capó, PHP volverá a utilizar la conexión original? ¿O creará PHP dos conexiones distintas con el servidor (indeseable, aunque totalmente comprensible)?
¡Gracias!
Si está utilizando dos API diferentes (es decir, mysql_*
y PDO), PHP generará dos conexiones diferentes.
Y, como una "prueba", considere esta parte del código:
$db = mysql_connect(''localhost'', ''USER'', ''PASSWORD'');
$pdo = new PDO(''mysql://@localhost/astralblog'', ''USER'', ''PASSWORD'');
sleep(5);
Ejecutar esto provocará dos conexiones distintas, en el servidor MySQL, que duerme durante 5 segundos:
mysql> show processlist;
+----+------------+-----------------+------------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------------+-----------------+------------+---------+------+-------+------------------+
| 41 | astralblog | localhost:46551 | astralblog | Sleep | 188 | | NULL |
| 42 | astralblog | localhost:46552 | astralblog | Sleep | 188 | | NULL |
| 43 | astralblog | localhost | astralblog | Query | 0 | NULL | show processlist |
| 64 | astralblog | localhost | NULL | Sleep | 4 | | NULL |
| 65 | astralblog | localhost | NULL | Sleep | 4 | | NULL |
+----+------------+-----------------+------------+---------+------+-------+------------------+
5 rows in set (0,00 sec)
(Las conexiones en cuestión son las dos últimas, que aparecieron cuando comencé el script PHP, y desaparecieron después de 5 segundos)