Getting a PHP PDO connection from a mysql_connect()?
Both extensions internally use EG(persistent_list) to store the persistent connection handle. But they create different hashes/keys for this list, so they can't find entries of the respective other extension.
The mysql extension creates keys of the form "mysql_<host&port>_<user>..."
while pdo builds "PDO:DBH:DSN=<dsn>:<user>:...."
. The hashes are used almost like array-keys in a php script. (Over-)simplyfied example:
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
}
}
So the answer is: No, the connections will not be shared between and re-used by the mysql extension and PDO.
If you are using two different APIs (i.e. mysql_*
and PDO), PHP will generate two different connections.
And, as a "proof", consider this portion of code :
$db = mysql_connect('localhost', 'USER', 'PASSWORD');
$pdo = new PDO('mysql://@localhost/astralblog', 'USER', 'PASSWORD');
sleep(5);
Running this will cause two distinct connections, on the MySQL server -- which will sleep for 5 seconds :
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)
(The connections in question are the two last one, which appeared when I started the PHP script, and disappeared after 5 seconds)