我试图在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问题,但不包含任何代码:PDO Microsoft Access。我真的只需要从文件中读取。
编辑:
通过一些修改,似乎我现在至少让PDO对驱动程序感到满意,通过更正现在包含以下内容的odbcinst.ini文件:
[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文件中,即使我在生产版本中无法执行此操作,但仍然遇到相同的错误。我确实发现这很有趣:DSN-less connection with PHP ODBC using MDBTools Driver。有什么建议吗?
答案 0 :(得分:0)
$driver = "MDBTools";
$dbName = "/PATH/DATABASE.MDB";
$db = new PDO("odbc:Driver=$driver;DBQ=$dbName", "", "");