PHP PDO没有从.mdb表返回正确的数据

时间:2014-12-29 16:13:06

标签: php ms-access pdo

我正在尝试从.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....

为什么我收到了错误的回报?

1 个答案:

答案 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()方法在为您提供调试输出方面做得很差。