我正在尝试从.mdb数据库表中检索行。它返回正确的列名,但我只接收1行(332行),只接收“区号”列作为指数。我正在使用this database。我已将其重命名为ac.mdb,并将表重命名为代码以便于编程。
我的代码:
<?php
$dbName = "ac.mdb";
if (!file_exists($dbName)) {
die("Could not find database file.");
}
try {
$db = new PDO("odbc:DRIVER=AccessMDB; DBQ=$dbName; Uid=Admin; Pwd=;");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo 'Connected to database<br />';
$sql = $db->prepare("SELECT * FROM codes");
echo ($sql->execute()) ? "Executed" : "Not Executed";
$result = $sql->fetch(PDO::FETCH_ASSOC);
echo '<pre>';
var_dump($result);
echo '</pre>';
} catch (PDOException $exception) {
echo $exception->getMessage();
exit;
}
?>
我的结果是:
Connected to database
Executed
array(2) {
["Area Code"]=>
string(22) "2.0100000000000000e+02"
["Region"]=>
NULL
}
如果我将fetch更改为fetchAll,我会获得332行,但数据类似:
Connected to database
Executed
array(332) {
[0]=>
array(4) {
["Area Code"]=>
string(22) "2.0100000000000000e+02"
[0]=>
string(22) "2.0100000000000000e+02"
["Region"]=>
NULL
[1]=>
NULL
}
[1]=>
array(4) {
["Area Code"]=>
string(22) "2.0200000000000000e+02"
[0]=>
string(22) "2.0200000000000000e+02"
["Region"]=>
NULL
[1]=>
NULL
}
[2]=>
array(4) {
["Area Code"]=>
string(22) "2.0300000000000000e+02"
[0]=>
string(22) "2.0300000000000000e+02"
["Region"]=>
NULL
[1]=>
NULL
}
//And so on....
为什么我收到了错误的回报?
答案 0 :(得分:0)
因此,表格中的字段为:
[区号]双号 [地区]文字,255
你有两个问题:
区域代码字段以科学记数法返回;你&#39; 11 需要将其格式化为3位数字,不带小数。
更令人困惑的是,Region一直都是NULL。 没有行具有NULL区域字段。
我的猜测:var_dump
只是严重倾销输出。不要使用var_dump
,而是尝试遍历结果并从数组中打印实际值。
这样的事情应该做:
$result = $sql->fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $row){
foreach ($row as $key => $val){
print "$val";
}
}
换句话说,我的理论是$ result实际上包含有效数据,但var_dump()
方法在为您提供调试输出方面做得很差。