我有一个带有扩展名*.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的结果?
答案 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中找到的抓取样式的更多信息。