不可靠的查询来自使用MDBTools驱动程序的具有PHP PDO odbc连接的Access DB

时间:2018-01-13 19:35:28

标签: php pdo mdbtools

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

0 个答案:

没有答案