一尘不染

从mysql_connect()获取PHP PDO连接?

mysql

我有一个旧版PHP /
MySQL应用程序,它调用mysql_connect()。现有的大量下游代码mysql_query()使用此连接直接或通过包装进行调用。

对于我在应用程序上开发的新代码,我想开始使用PDO。

如果我使用相同的主机/用户/密码/
dbname凭据建立PDO连接,那么我是否很幸运,在幕后,PHP将重新使用原始连接?还是PHP将创建与服务器的两个不同的连接(虽然完全可以理解,但这是不希望的)?

谢谢!


阅读 320

收藏
2020-05-17

共1个答案

一尘不染

如果您使用两个不同的API(即mysql_*PDO和PDO),PHP将生成两个不同的连接。

并且,作为“证明”,请考虑以下部分代码:

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

运行此命令将在MySQL服务器上导致两个不同的连接-它将hibernate5秒钟:

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秒后消失)

2020-05-17