单个记录的PHP PDO和访问数据库双重结果

时间:2015-07-20 18:22:05

标签: php ms-access pdo

我有一个带有扩展名*.accdb的ms access 2010数据库,我设法使用PDO和ODBC驱动程序连接到数据库。

我尝试删除*.mdb*.accdb并收到错误,但我不知道为什么它需要这两个扩展程序。

这是POC:

<?php
$dbName = 'here be path';
$db = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=$dbName; Uid=; Pwd=;");

$sql = "SELECT MAX(ID) as MaxID from tbl";
$result = $db->query($sql);

foreach($result as $r) {
    var_dump($r);
}

奇怪的是获得的结果:

array (size=2)
  'MaxID' => string '21411' (length=5)
  0 => string '21411' (length=5)

为什么我为一个预期结果获得2个条目? 我怎样才能获得这个:

    array (size=1)
  'MaxID' => string '21411' (length=5)

第二件事是我如何优化PDO以获得一个没有foreach的结果?

1 个答案:

答案 0 :(得分:4)

您获得加倍的结果,因为默认提取样式设置为Sub Function_asdf() ... On Error GoTo ErrorHandler ... ErrorHandler: & vbNewLine & "Error" & Err.Number & Err.line & Err.Description

  

(默认值):返回由列名和0索引编制索引的数组   结果集中返回的列号

因此,您可以使用索引号或实际键名称调用数组中的项目。

PDO::FETCH_BOTH

如果您不想重复更改您的风格,例如到$result[0] or $result['MaxID'] will return the same result.

PDO::FETCH_ASSOC

有关您可以在documentation中找到的抓取样式的更多信息。