我在 Ubuntu 16.04 机器上,并通过 PHP PDO 连接到 MS Access 数据库。我正在使用 MDBTools odbc 驱动程序。为此,我在终端中运行了以下命令:
sudo apt install php7.0-odbc
sudo apt install libmdbodbc1
sudo service apache2 restart
sudo ln -s /usr/lib/x86_64-linux-gnu/libodbccr.so.2 /etc/libodbccr.so
我可以很好地连接到数据库。连接示例:
$driver = 'MDBTools';
$accdb = '/var/www/html/access/mydb.accdb';
$dbh = new PDO('odbc:DRIVER=' . $driver . '; DBQ=' . $accdb);
第一个查询:
// See a whole record
foreach( $dbh->query('
SELECT
*
FROM Assets
WHERE Asset_ID = 12
', PDO::FETCH_ASSOC) as $row )
{
echo '<pre>';
var_dump( $row );
echo '</pre>';
}
第一次查询的结果:
array(7) {
["Asset_ID"]=>
string(2) "12"
["Asset_Date"]=>
string(17) "10/07/16 00:00:00"
["Asset_Category"]=>
NULL
["Asset_SubCategory1"]=>
NULL
["Asset_Spot_X"]=>
NULL
["Asset_Spot_Y"]=>
NULL
["Asset_Spot_Z"]=>
NULL
}
请注意,在第一个查询中,许多字段显示值为 NULL,但这实际上不是数据库中的方式。我将在第二个查询中向您展示:
// See same record's Asset_Spot_X value
foreach( $dbh->query('
SELECT
Asset_Spot_X
FROM Assets
WHERE Asset_ID = 12
', PDO::FETCH_ASSOC) as $row )
{
echo '<pre>';
var_dump( $row );
echo '</pre>';
}
第二次查询的结果:
array(1) {
["Asset_Spot_X"]=>
string(4) "1252"
}
这些查询同时运行,因此 Asset_Spot_X 的值应该相同,但在一个我得到 NULL,在另一个我得到 1252。我做错了什么?看起来我正在做的查询非常简单,所以我不明白发生了什么。当我检查 errorInfo 和 errorCode 时,PDO 没有显示任何错误。