web-dev-qa-db-fra.com

PDO renvoyant une erreur «impossible de trouver le pilote» avec un DSN de travail connu

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.

odbc manager's dsns

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?

Mise à jour

J'ai ouvert ma page phpinfo pour m'assurer que le pilote odbc est installé selon le commentaire de Marc B:

odbc in phpini

Il semble que le pilote soit installé, sauf s'il s'agit d'un pilote différent.

Une autre mise à jour

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é:

enter image description here

Donc, ici, si j'avais le pilote ODBC pour pdo installé, odbc serait à la fin de la liste, n'est-ce pas?

12
Chris Schmitz

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.

missing odbc driver

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.

including php_pdo.dll

Après avoir ajouté le pilote et redémarré le serveur, j'ai maintenant chargé le pilote:

enter image description here

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:

pdo var dump

Merci pour votre aide Marc B.

12
Chris Schmitz