Steve Eklund
Steve Eklund

Reputation: 411

PDO cannot find ODBC driver

Trying to migrate to PDO for an ODBC connection to a remote database.

My system is Windows 7 Pro, with a FortiClient VPN connection to the remote domain, and Tunnel Mode connected. (Added in edit: Running PHP 5.4, so PDO should be installed by default.)

The data source configuration in the Windows 7 ODBC Data Source Administrator is as follows (some names changed for security):

The following piece of PHP non-PDO code is able to create a connection usable for queries:

    if (!($myConn = odbc_connect('TheBigDB','BigDBUser','myPwd'))) {
        echo "No ODBC connection<br />";
    }

So I can connect to the database. The problem is doing it in PDO. The following PHP...

    try {
        $odbcConn = new PDO('odbc:Driver={Oracle in instantclient_11_2};Server=10.10.1.20:1521;Database=BIGDB;Uid=BigDBUser;Pwd=myPwd');
    } catch (PDOException $e) {
        echo 'PDO connection failed: ' . $e->getMessage();
    }

... results in a PDO connection failed: could not find driver message. My first try relied more heavily on the Data Sources Administrator; that looked like this:

    try {
        $odbcConn = new PDO('MyBigDB','BigDBUser','myPwd');
    } catch (PDOException $e) {
        echo 'PDO connection failed: ' . $e->getMessage();
    }

Same thing -- could not find driver.

So here's my question: Given a Windows 7 system with ODBC through a VPN connection to an Oracle database that all seems to work without PDO, how do I migrate the connection parameters to create a PDO connection? Maybe a better question is why mess with PDO for the connection, but I keep reading that PDO is more secure, so I'm trying to use it.

Upvotes: 2

Views: 2975

Answers (1)

Steve Eklund
Steve Eklund

Reputation: 411

More digging got me an answer. The correct syntax for creating a PDO object that uses a Windows Data Sources ODCB connection is not what I showed, but instead this (minus the try/catch):

    $myConn = new PDO('odbc:TheBigDB','BigDBUser','myPwd');

BUT... with PHP 5.4.12 using ODBC to touch an Oracle 11 DB, you need to edit the correct php.ini file (see this WampServer forum topic for a discussion of which of three php.ini files you need to edit). Under Dynamic Extensions, uncomment extension=php_pdo_odbc.dll and extension=php_pdo_oci.dll (I did both; not sure which one did the trick...)

Another tip: In my scripts, neither odbc_connect() nor PDO() worked for me unless my connection was created in Windows Data Sources Administrator under the System DSN tab. It did not work under User DSN.

Upvotes: 2

Related Questions