2015-08-04 25 views
7

Ich versuche, zu einer ODBC-Datenbank über die php PDO Klasse zu verbinden:PDO Rückkehr Fehler mit einem funktionierenden DSN „nicht-Treiber finden konnte“

$dsn = 'odbc:CS_HDZipCodes32bit'; 
$username = 'demo'; 
$password = 'skdemo!'; 

$connection = new PDO($dsn, $username, $password); 

die(var_dump($connection)); 

aber wenn ich es tue, erhalte ich die Fehlermeldung:

Der Wert $dsn ist der Name des DSN, den ich in meinem ODBC Manager erstellt habe.

odbc manager's dsns

Ich weiß, diese besondere DSN funktioniert, weil ich eine andere Demo-Datei erstellen konnte und erfolgreich eine Verbindung über 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)); 

Ich habe ebenso wie andere durch die PDO-ODBC Dokumentation gegraben Ressourcen online, aber ich kann nicht herausfinden, warum PHP den Treiber nicht finden kann, wenn er von PDO versucht.

Irgendwelche Ideen?

aktualisieren

ich meine phpinfo Seite sprang auf, um sicherzustellen, der ODBC-Treiber pro Marc B Kommentar installiert ist:

odbc in phpini

Es sieht aus wie der Treiber installiert ist, es sei denn dies ein anderer Fahrer .

Ein weiteres Update

Bei der weiteren Überprüfung meiner phpini pro Marc B zusätzlichen Kommentar, es sieht aus wie ich die POD ODBC bestimmten Treiber nicht installiert haben:

enter image description here

Also hier, wenn Ich hatte den ODBC-Treiber für PDO installiert, odbc wäre am Ende der Liste, richtig?

+0

auf dem "schlechten" dsn versuchen odbc_connect haben? –

+0

Ja, der Codeblock am Ende war ich benutze die gleiche DSN von oben mit odbc_connect. –

+0

ok, hast du dann überprüft ob der pdo odbc treiber installiert ist? pdo hat seine eigenen Treiber und "wickelt" nicht nur die Funktionen von odbc _ *() '. –

Antwort

7

Nachdem ich von Marc B in den ersten Fragen eine große Hilfe bekommen habe, stellte sich heraus, dass das Problem von meinem Missverständnis, odbc auf meinem Webserver zu aktivieren, und dem pdo_odbc Treiber installiert wurde.

Während ich ODBC auf dem Webserver aktiviert hatte, hatte ich nicht den ODBC-Treiber für PDO installiert.

missing odbc driver

Dieser Treiber ist notwendig, ODBC-Datenbanken über gU zugreifen zu können.

Laut der php.net Dokumentation auf installing pdo für Windows, war der Treiber bereits in der PHP-Build enthalten (ich verwende Version 5.5) und musste nur in der Datei php.ini enthalten sein.

including php_pdo.dll

Nachdem Sie den Treiber hinzufügen und den Server neu gestartet hatte ich nun der Treiber geladen:

enter image description here

und meine Testabfrage auf meine Demo-Datenbank mit PDO gearbeitet:

$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); 
} 

Entfällt:

pdo var dump

Danke für Ihre Hilfe Marc B.