2008-10-26 61 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 

一種跛腳,但它很簡單,它的工作原理。