在CentOS机器上用PHP访问MDB文件

在CentOS机器上用PHP访问MDB文件,php,ms-access,pdo,unixodbc,mdbtools,Php,Ms Access,Pdo,Unixodbc,Mdbtools,我试图在CentOS机器上使用PHP访问MDB文件,最好使用PDO。我已经在PHP中安装了ODBC和pdo_ODBC模块,并重新启动了web服务器Apache。我还安装了mdbtools和unixODBC print_r(PDO::getAvailableDrivers()); 显示: Array ( [0] => mysql [1] => odbc [2] => pgsql [3] => sqlite ) 我尝试访问本地保存的DBA文

我试图在CentOS机器上使用PHP访问MDB文件,最好使用PDO。我已经在PHP中安装了ODBC和pdo_ODBC模块,并重新启动了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问题,但不包括任何代码:。我真的只需要从文件中读取

编辑:

通过一些修补,我现在至少可以通过修改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文件中,尽管在生产版本中无法这样做,但仍然会收到相同的错误。我确实发现这很有趣:。有什么建议吗?

也许这很有用:非常有用!在将正确的条目添加到odbcinst.ini文件后,PHP和PDO现在似乎找到了正确的驱动程序,但现在我遇到了一个错误:无法在连接字符串中找到DNS。我没有向odbc.ini添加条目,因为所有相关信息都应该在PDO调用中。有什么想法吗?
$driver = "MDBTools";
$dbName = "/PATH/DATABASE.MDB";
$db = new PDO("odbc:Driver=$driver;DBQ=$dbName", "", "");