为什么PHP PDO DSN与PostgreSQL是MySQL的不同格式?

2022-08-30 13:16:03

当我使用PDO连接到MySQL数据库时,我需要连接的方式是:

$pdoConnection = new PDO("mysql:host=hostname;dbname=databasename",user,password);

但是,对于PostgreSQL,DSN更标准(IMO):

$pdoConnection = new PDO("pgsql:host=hostname;dbname=databasename;user=username;password=thepassword");

MySQL不能使用单个字符串有什么原因吗?或者这仅仅是因为我使用的版本(PHP 5.2,MySQL 5.0,PostgreSQL 8.1)?


答案 1

作为同时实现两者的人,我可以告诉您,原因是通过将字符串按原样传递到postgres(和ODBC),这些数据库的PDO驱动程序代码不需要更新,因为基础库添加了新功能。

由于MySQL没有自己的连接字符串解析代码,我们发明了一种将数据传递到底层MySQL函数调用的机制,这些调用具有固定参数的非常具体的API。

没有事故;这是非常刻意的。


答案 2

这在 PHP 7.4 中已得到解决,如新功能所示

我已经在本地确认了我们可以写:

$dbh = new PDO('mysql:host=localhost;dbname=my_db;charset=utf8mb4;user=root;password=')

推荐