Получение соединения PHP PDO из mysql_connect ()?

У меня есть устаревшее приложение PHP / MySQL, которое вызывает mysql_connect (). Тонны существующего нисходящего кода делают mysql_query() напрямую или через обертку, используя это соединение.

Для нового кода, который я разрабатываю в приложении, я хотел бы начать использовать PDO.

Если я сделаю PDO-соединение с использованием тех же учетных данных host / user / pass / dbname, могу ли я так повезло, что под капотом PHP снова будет использовать исходное соединение? Или PHP создаст два разных соединения с сервером (нежелательно, хотя и вполне понятно)?

Благодаря!

Если вы используете два разных API (т.е. mysql_* и PDO), PHP будет генерировать два разных соединения.

И, как «доказательство», рассмотрим эту часть кода:

 $db = mysql_connect('localhost', 'USER', 'PASSWORD'); $pdo = new PDO('mysql://@localhost/astralblog', 'USER', 'PASSWORD'); sleep(5); 

Запуск этого приведет к двум различным соединениям на сервере MySQL, которые будут спать в течение 5 секунд:

 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) 

(Связанные соединения – это два последних, которые появились, когда я запустил PHP-скрипт и исчез через 5 секунд)

Оба внутренних устройства используют EG (persistent_list) для хранения стойкого дескриптора соединения. Но они создают разные хэши / ключи для этого списка, поэтому они не могут найти записи соответствующего другого расширения.

Расширение mysql создает ключи формы "mysql_<host&port>_<user>..." а pdo создает "PDO:DBH:DSN=<dsn>:<user>:...." . Хэши используются почти как массивные ключи в php-скрипте. (Over-) простой пример:

 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 } } 

Таким образом, ответ: Нет, соединения не будут использоваться совместно и повторно использоваться расширением mysql и PDO.