我正在使用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没有显示任何错误。