لماذا PHP PDO DSN بتنسيق مختلف لـ MySQL مقابل PostgreSQL؟



Answers

نعم ، هذا التناقض في واجهة برمجة التطبيقات يعد مصدر إزعاج كبير.

كمحاولة ، أحزم سلسلة 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

نوع عرجاء ، لكنه بسيط ويعمل.

Question

عندما أقوم بالاتصال بقاعدة بيانات MySQL باستخدام PDO ، فإن الطريقة التي أحتاج إلى الاتصال بها هي:

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




Links