2015-08-04 8 views
7

Sto cercando di connettersi ad un database ODBC tramite PDO classe di PHP:DOP errore di ritorno "non poteva trovare driver" con un DSN funzionante

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

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

die(var_dump($connection)); 

ma quando lo faccio, ottengo l'errore:

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

Il valore $dsn è il nome del DSN che ho creato nel mio gestore ODBC.

odbc manager's dsns

So che questo particolare DSN funziona perché sono stato in grado di costruire un altro file demo e connettersi 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)); 

ho scavato attraverso la documentazione PDO-ODBC così come altri risorse online, ma non riesco a capire perché PHP non è in grado di trovare il driver quando si prova da PDO.

Qualche idea?

Aggiornamento

ho spuntato aperto la mia pagina phpinfo per assicurarsi che il driver ODBC è installato per il commento di Marc B:

odbc in phpini

Sembra che il driver è installato a meno che non si tratta di un driver diverso .

Un altro aggiornamento

Su ulteriore controllo della mia phpini per ogni ulteriore commento di Marc B, sembra che io non ho il driver specifico POD ODBC installato:

enter image description here

Quindi, ecco, se Ho avuto il driver ODBC per pdo installato, odbc sarebbe alla fine della lista, corretto?

+0

hai provato odbc_connect sul DSN "cattivo"? –

+0

Sì, il blocco di codice nella parte inferiore era che io usavo lo stesso dsn dall'alto con odbc_connect. –

+0

ok, allora hai controllato se il driver pdo odbc è installato? pdo ha i suoi driver e non si limita a "avvolgere" le funzioni di 'odbc _ *()'. –

risposta

7

Dopo aver ricevuto un grande aiuto da Marc B nei commenti della domanda iniziale, si è scoperto che il problema derivava dal mio malinteso di abilitare odbc sul mio server Web e di avere il driver pdo_odbc installato.

Mentre l'odbc era abilitato sul server Web, non avevo installato il driver odbc per PDO.

missing odbc driver

Questo driver è necessario per essere in grado di accedere ai database ODBC tramite PDO.

Per la documentazione di php.net su installing pdo per Windows, il driver era già incluso nel php build (sto usando la versione 5.5) e dovevo solo essere incluso nel file php.ini.

including php_pdo.dll

Dopo aver aggiunto il driver e riavviare il server ora avevo il driver caricato:

enter image description here

e la mia interrogazione test utilizzando DOP sul mio database demo ha funzionato:

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

Discariche:

pdo var dump

Grazie per il vostro aiuto Marc B.