2008-10-26 60 views
29

当我使用PDO连接到MySQL数据库,我需要连接的方法是:为什么PHP PDO DSN是MySQL与PostgreSQL的不同格式?

$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)?

回答

-15

这只是一个意外,执行mysql连接器的人做的不同于实施pgsql连接器的人。

83

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

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

无意外;这是非常慎重的。

+16

你不能与Wez的答案争论......这怎么还没被接受呢? :) – TML 2009-09-16 21:20:25

2

是的,这个API不一致是一个主要的烦恼。

作为一种变通,我包的实际DSN字符串以可选的用户名和密码,使用查询字符串语法 - 然后解析和构建这样的:

parse_str($connection_string, $params); 

$pdo = new PDO($params['dsn'], @$params['username'], @$params['password']); 

所以PostgreSQL的,使用$connection_string,如:

dsn=pgsql:host=localhost;dbname=test;user=root;password=root 

而对于MySQL的,使用像一个字符串:

dsn=mysql:host=localhost;dbname=testdb&username=root&password=root 

一种跛脚,但它很简单,它的工作原理。