35

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) が原因なのでしょうか?

4

4 に答える 4

96

両方を実装した人として、その理由は、文字列をそのまま postgres (および ODBC) に渡すことで、これらのデータベースの PDO ドライバー コードを更新する必要がないためです。基盤となるライブラリが新しい機能を追加するためです。 .

MySQL には独自の接続文字列解析コードがないため、基礎となる MySQL 関数呼び出しにデータを渡すメカニズムを発明しました。これには、固定パラメーターを持つ非常に特殊な API があります。

事故はありません。それは非常に意図的です。

于 2009-08-22T00:28:06.630 に答える
3

そうです、この 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

ちょっと不自由ですが、シンプルで機能します。

于 2016-05-25T11:52:48.317 に答える