Pourquoi est-PHP PDO DSN un format différent par rapport à MySQL PostgreSQL?
Lorsque je me connecte à une base de données MySQL à l'aide de PDO, la manière dont j'ai besoin pour vous connecter est:
$pdoConnection = new PDO("mysql:host=hostname;dbname=databasename",user,password);
Mais, pour PostgreSQL, la DSN est plus standard (OMI):
$pdoConnection = new PDO("pgsql:host=hostname;dbname=databasename;user=username;password=thepassword");
Est-il une raison pourquoi MySQL ne peut pas utiliser une seule chaîne de caractères? Ou est-ce juste parce que des versions, je suis en utilisant (PHP 5.2, MySQL 5.0, PostgreSQL 8.1)?
Vous devez vous connecter pour publier un commentaire.
Que la personne qui a mis en œuvre les deux, je peux vous dire que la raison en est qu'en passant la chaîne à travers comme-est de postgres (et ODBC) le driver PDO code de ces bases de données n'a pas besoin d'être mis à jour comme la bibliothèque sous-jacente ajoute de nouvelles fonctionnalités.
Depuis MySQL ne dispose pas de sa propre chaîne de connexion code d'analyse, nous avons inventé un mécanisme pour transmettre des données dans le sous-jacent MySQL appels de fonction, qui possèdent une API spécifique avec des paramètres fixes.
Pas un hasard; c'est très délibérée.
Yep, cette API incohérence est une nuisance majeure.
Pour contourner ce problème, j'emballe le véritable chaîne de DSN en option avec un nom d'utilisateur et le mot de passe à l'aide de la chaîne de la requête de la syntaxe ensuite d'analyser et de construire comme ceci:
Donc pour PostgreSQL, utiliser un
$connection_string
comme:Et pour MySQL, utilisez une chaîne de caractères comme:
Genre de boiteux, mais c'est simple et ça fonctionne.
Cette question est de plus de 10 ans, mais j'ai encore de fin, jusqu'ici, à chaque fois que je créer un nouveau projet qui utilise PDO... je suis en train d'écrire ma solution ici afin que je puisse me sauver la peine la prochaine fois 😛