1

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

4

0 回答 0