PHP PDO 没有从 .mdb 表返回正确的数据
Posted
技术标签:
【中文标题】PHP PDO 没有从 .mdb 表返回正确的数据【英文标题】:PHP PDO not returning correct data from .mdb table 【发布时间】:2014-12-29 16:13:06 【问题描述】:我正在尝试从 .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....
任何想法为什么我得到错误的回报?
【问题讨论】:
每个返回的数字略有不同,看100的小数位。问题是您的数据没有被正确解释。 【参考方案1】:所以,表中的字段是:
[区号]双 [区域] 文本,255
你有两个问题:
区号字段恢复为科学计数法;你会 需要将其格式化为不带小数的 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()
方法在为您提供调试输出方面做得很差。
【讨论】:
为了整洁,我把你的回复改成了这个。 $result = $sql->fetchAll(PDO::FETCH_ASSOC); foreach ($result as $row) foreach ($row as $key => $val) print "$key = $val"; 我得到了...连接到数据库的区域代码= 2.010000000000000000 + 02 region =区号= 2.030000000000000000 + 02 region =区号= 2.0400000000000000002 + 02 region =区号= 2.040000000000000000 e+02 Region = 等等.. 不知道如何格式化评论以使其看起来不错,抱歉。 好吧,这让我的理论大跌眼镜。显然 region 实际上是 NULL。 对于它的价值,我正在访问中查看这张表,没有什么比这更奇怪了; Region 字段中的任何行都没有长度为零的字符串。 还在琢磨中 如果您明确请求这些列而不是使用select *
,是否会发生任何变化?您可能需要将Area Code
括在括号中:select [Area Code], Region
哦.. 我想你一直在查询错误的表!试试这个:$sql = $db->prepare("select * from [Area Codes]");
当然除非你只是重命名它。 :)以上是关于PHP PDO 没有从 .mdb 表返回正确的数据的主要内容,如果未能解决你的问题,请参考以下文章
在 PHP 中通过 ODBC(使用 PDO)查询雪花返回不正确的数据
PHP| PEAR:MDB2 vs PDO vs Native-PHP(原始)