J'essaie de me connecter à une base de données ODBC via la classe PDO
de php:
$dsn = 'odbc:CS_HDZipCodes32bit';
$username = 'demo';
$password = 'skdemo!';
$connection = new PDO($dsn, $username, $password);
die( var_dump( $connection ) );
mais quand je le fais, je reçois l'erreur:
Erreur fatale: l'exception non interceptée 'PDOException' avec le message 'n'a pas pu trouver le pilote' dans C:\inetpub\wwwroot\pdoClass.php: 7 Trace de pile: # 0 C:\inetpub\wwwroot\pdoClass.php (7): PDO- > __ construct ('odbc: CS_HDZipCo ...', 'demo', 'skdemo!') # 1 {main} jeté dans C:\inetpub\wwwroot\pdoClass.php sur la ligne 7
Le $dsn
value est le nom du DSN que j'ai créé dans mon ODBC Manager.
Je sais que ce DSN fonctionne, car j'ai pu créer un autre fichier de démonstration et me connecter avec succès via odbc_connect
:
$connection = odbc_connect("CS_HDZipCodes32bit", 'demo', 'skdemo!');
if(!$connection){
die('connection failed');
}
$statement = "SELECT * FROM ZipCodes";
$result = odbc_exec($connection, $statement);
// Outputs the zips as expected
var_dump(odbc_result_all($result));
J'ai fouillé dans la documentation PDO-ODBC ainsi que d'autres ressources en ligne, mais je n'arrive pas à comprendre pourquoi PHP est incapable de trouver le pilote lorsque essayer de PDO.
Des idées?
J'ai ouvert ma page phpinfo pour m'assurer que le pilote odbc est installé selon le commentaire de Marc B:
Il semble que le pilote soit installé, sauf s'il s'agit d'un pilote différent.
Après une inspection plus approfondie de mon phpini par le commentaire supplémentaire de Marc B, il semble que je n'ai pas le pilote spécifique POD ODBC spécifique installé:
Donc, ici, si j'avais le pilote ODBC pour pdo installé, odbc
serait à la fin de la liste, n'est-ce pas?
Après avoir obtenu une aide précieuse de Marc B dans les commentaires de la question initiale, il s'est avéré que le problème venait de ma mauvaise compréhension de l'activation de odbc
sur mon serveur Web et du pdo_odbc
pilote installé.
Même si odbc était activé sur le serveur Web, je n'avais pas installé le pilote odbc pour PDO.
Ce pilote est nécessaire pour pouvoir accéder aux bases de données odbc via pdo.
Selon la documentation de php.net sur installation de pdo pour Windows, le pilote était déjà inclus dans la version php (j'utilise la version 5.5) et avait juste besoin d'être inclus dans le php.ini
fichier.
Après avoir ajouté le pilote et redémarré le serveur, j'ai maintenant chargé le pilote:
et ma requête de test utilisant PDO sur ma base de données de démonstration a fonctionné:
$dsn = 'odbc:CS_HDZipCodes32bit';
$username = 'demo';
$password = 'skdemo!';
$connection = new PDO($dsn, $username, $password);
$query = "Select * FROM ZipCodes";
$result = $connection->query($query);
foreach($result as $row){
var_dump($row);
}
Décharge:
Merci pour votre aide Marc B.