1

CentOS マシンで PHP を使用して、できれば PDO を使用して MDB ファイルにアクセスしようとしています。ODBC および pdo_odbc モジュールを PHP にインストールし、Web サーバー (Apache) を再起動しました。mdbtools と unixODBC もインストールしました。

print_r(PDO::getAvailableDrivers());

ショー:

Array
(
    [0] => mysql
    [1] => odbc
    [2] => pgsql
    [3] => sqlite
)

次のコードを使用して、DBA ファイル (ローカルに保存されている) にアクセスしようとしています。

try
{
    $driver = "/usr/lib64/libmdbodbc.so.0";
    $dbName = "/PATH/FILE.MDB";
    if (!file_exists($dbName)) {
        die("Could not find database file.");
    }
    $db = new PDO("odbc:DRIVER=$driver; DBQ=$dbName; Uid=; Pwd=;");

    $sql  = "SHOW TABLES";

    $result = $db->query($sql);
    $row = $result->fetch();

    var_dump($row);

}
catch(Exception $e)
{
    echo "\n\nEXCEPTION: $e\n\n";
}

そして、これは以下を出力します:

EXCEPTION: exception 'PDOException' with message 'SQLSTATE[IM002] SQLDriverConnect: 0 [unixODBC][Driver Manager]Data source name not found, and no default driver specified' in /PATH/odbctest.php:14
Stack trace:
#0 /PATH/odbctest.php(14): PDO->__construct('odbc:DRIVER=/us...') 
#1 {main}

何を変更する必要がありますか? ドライバー名には何を使用すればよいですか? あらゆる場所を調べましたが、2004 年の非常に古いものしか見つかりませんでしたが、多くのリンクが何年にもわたって消えてしまいました。これは最も関連性の高い StackOverflow の質問ですが、コードは含まれていません: PDO Microsoft Access . 私は本当にファイルから読み取るだけです。

編集:

いくつかいじくり回すと、次の内容を含む odbcinst.ini ファイルを修正することで、少なくとも PDO がドライバーに満足しているように見えます。

[MDBTools]
Description = MDBTools Driver
Driver64    = /usr/lib64/libmdbodbc.so.0
Setup       = /usr/lib64/libmdbodbc.so.0
FileUsage   = 1
UsageCount  = 1

残念ながら、私はまだエラーが発生しています:

exception 'PDOException' with message 'SQLSTATE[08001] SQLDriverConnect: 1 [unixODBC]Could not find DSN in connect string' in /PATH/odbctest.php:15
Stack trace:
#0 /PATH/odbctest.php(15): PDO->__construct('odbc:Driver=MDB...')
#1 {main}

次のように PDO 呼び出しを行っています。

$driver = "MDBTools";
$dbName = "/PATH/DATABASE.MDB";
$db = new PDO("odbc:Driver=$driver; DBQ=$dbName; Uid=; Pwd=;");

データ ソースを odbc.ini ファイルに追加しようとしましたが、実稼働バージョンではこれを行うことができず、同じエラーが引き続き発生します。これは興味深いものでした: MDBTools Driver を使用した PHP ODBC との DSN レス接続。助言がありますか?

4

1 に答える 1

0
$driver = "MDBTools";
$dbName = "/PATH/DATABASE.MDB";
$db = new PDO("odbc:Driver=$driver;DBQ=$dbName", "", "");
于 2016-12-06T20:56:40.797 に答える