servidor datos conexion conectar con como clase archivo php mysql pdo

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)