2015-08-04 39 views
7

Próbuję połączyć się z ODBC bazy danych za pośrednictwem PHP PDO Klasa:PDO powrocie błąd „nie można znaleźć sterownika” ze znanym DSN pracy

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

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

die(var_dump($connection)); 

ale kiedy zrobić, pojawia się błąd:

Fatal error: Uncaught exception 'PDOException' with message 'could not find driver' in C:\inetpub\wwwroot\pdoClass.php:7 Stack trace: #0 C:\inetpub\wwwroot\pdoClass.php(7): PDO->__construct('odbc:CS_HDZipCo...', 'demo', 'skdemo!') #1 {main} thrown in C:\inetpub\wwwroot\pdoClass.php on line 7

Wartość $dsn jest nazwą DSN utworzonego w moim Menedżerze ODBC.

odbc manager's dsns

Znam ten konkretny DSN działa, ponieważ udało mi się zbudować kolejny plik demo i połączyć z powodzeniem poprzez 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)); 

Byłem kopanie poprzez dokumentację PDO-ODBC jak również inne zasobów online, ale nie mogę zrozumieć, dlaczego PHP nie może znaleźć sterownika podczas próby z PDO.

Wszelkie pomysły?

Aktualizacja

I otworzył moją stronę phpinfo aby upewnić się, że sterownik ODBC jest instalowany za Marc B. Komentarz:

odbc in phpini

Wygląda na to sterownik jest zainstalowany, chyba że jest to inny kierowca .

Kolejna aktualizacja

W dalszej kontroli mojego pojęcia php.ini za każdy dodatkowy komentarz Marc B., wygląda na to, że nie mają specyficzny sterownik POD ODBC zainstalowane:

enter image description here

Więc, jeśli Miałem sterownik ODBC dla zainstalowanego pdo, odbc byłby na końcu listy, prawda?

+0

próbowałaś odbc_connect na "złego" dsn? –

+0

Tak, blok kodu na dole był ja przy użyciu tego samego dsn z góry z odbc_connect. –

+0

ok, to czy sprawdziłeś, czy sterownik pdo odbc jest zainstalowany? pdo ma własne sterowniki i nie tylko "zawija" funkcje "odbc _ *()". –

Odpowiedz

7

Po otrzymaniu dużej pomocy od Marca B w komentarzach do pierwszego pytania okazało się, że problem wynikał z mojego nieporozumienia dotyczącego włączenia odbc na moim serwerze internetowym i zainstalowania sterownika pdo_odbc.

Podczas gdy miałem włączony serwer odbc na serwerze sieci Web, nie zainstalowałem sterownika odbc dla PDO.

missing odbc driver

Sterownik ten jest konieczny, aby móc uzyskać dostęp do bazy danych poprzez ODBC PDO.

Dla dokumentacji php.net na installing pdo dla Windows, sterownik był już zawarty w kompilacji php (używam wersji 5.5) i właśnie musiał być zawarty w pliku php.ini.

including php_pdo.dll

Po dodaniu sterownika i ponownym uruchomieniu serwera I teraz miał kierowca załadowany:

enter image description here

i moje zapytanie badanie przy użyciu PDO na mojej bazy demo działało:

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

Zrzuca:

pdo var dump

Dzięki za pomoc Marc B.