Php 为什么PDO构造函数不将主机、数据库名、数据库类型等作为常规函数参数?

Php 为什么PDO构造函数不将主机、数据库名、数据库类型等作为常规函数参数?,php,pdo,Php,Pdo,我正在学习PDO,构造函数似乎使用了一种非正统且不一致的方法来获取参数。即: $dbh = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); 为什么与通常的格式不同: $dbh = new PDO("mysql", $host, $dbname, $user, $pass); 或者,由于前两个参数(host和dbname)被编写为一个长字符串,为什么不继续使用其余两个参数呢?即: $dbh = new PDO("mysql:h

我正在学习PDO,构造函数似乎使用了一种非正统且不一致的方法来获取参数。即:

$dbh = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
为什么与通常的格式不同:

$dbh = new PDO("mysql", $host, $dbname, $user, $pass);
或者,由于前两个参数(host和dbname)被编写为一个长字符串,为什么不继续使用其余两个参数呢?即:

$dbh = new PDO("mysql:host=$host;dbname=$dbname;user=$user;pass=$pass");

PDO使用DSN进行连接,用户名和密码是DSN字符串的可选参数

退房


我并不认为这是“非正统的或不一致的”,PHP中的ODBC使用相同的过程。

DSN描述了数据源所在的位置以及如何连接到它。User和pass是身份验证参数,对数据源的访问方式没有任何影响


让user和pass进入DSN就像要求在您要访问的网站的url中输入用户名和密码一样。

原因是:“非正统”,因为我从未遇到过一个PHP函数以这种方式接受参数,“不一致”因为似乎有些参数被接受为字符串,有些只是变量。但我肯定会调查DSN。谢谢啊,我明白你的意思了,它与调用mysql_connect()等的传统方式有很大不同。