【问题标题】:Can't fetch any data with PDO's fetch or fetchAll function无法使用 PDO 的 fetch 或 fetchAll 函数获取任何数据
【发布时间】:2014-11-19 05:26:07
【问题描述】:

我已经有一段时间了。使用 PDO 的文档并基于旧的 stackoverflow 帖子,我觉得我这样做是正确的,但是我无法弄清楚我的数据在 fetchAll 返回的数组中的位置。任何帮助将不胜感激。

在我的 DatabaseHandler 类中:

public function getStateList(){
    $root = "root";
    $rootpasswd = "password";
    $host = "localhost";
    try{
        $dbh = new PDO("mysql:host=$host;dbname=TESTDATA;", $root, $rootpasswd);
        $stmt = $dbh->prepare("SELECT id FROM state");
        if(!$stmt->execute()){
            //error
        }
        $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
        return $result;
    }catch(PDOExeption $e){
        //catch exception
    }
}

现在,当调用此方法时,它返回一个包含 52 个 id 的数组,这是它应该执行的操作,但我无法获取此数据。为什么?这是调用该方法的代码。

<?php
    require("./Database/DatabaseHandler.php");

    $dbh = new DatabaseHandler();
    $stateCodes = $dbh->getStateList();
    $max = sizeof($stateCodes);

    error_log("Arraysize=".$max."\n", 3, "/testlog/data.dat");
    error_log("Position 0: ".$stateCodes[0]."\n", 3, "/testlog/data.dat");
    error_log("Position[0][0]: ".$stateCodes[0][0]."\n", 3, "/testlog/data.dat");
    error_log("Position[0][0][0]: ".$stateCodes[0][0][0]."\n", 3, "/testlog/data.dat");
?>

第一个错误日志记录 52。 第二个返回单词 Array ,这让我认为它是一个 2 dim 数组。 第三无。 第四无。

我知道我以某种方式错误地使用了 fetchAll,但我不知道在哪里或如何使用。提前谢谢你。

【问题讨论】:

  • 你试过print_r($stateCodes)吗?

标签: php mysql pdo fetch fetchall


【解决方案1】:

您使用了PDO::FETCH_ASSOC,这将是一个关联数组。

但由于您要获取所有数据,因此该数组是二维的。

$stateCodes[0]['id'];

您也可以这样循环:

foreach($stateCodes as $code){
    error_log("Code Id =" . $code['id']);
}

【讨论】:

  • 那么我怎样才能只返回身份证号码呢?我是否总是必须通过 ['id'] 明确要求 id
  • 这是你的查询所做的,返回所有状态的 id
  • 如果您的意思是要使用数字索引进行访问,请使用PDO::FETCH_BOTH,这样您就可以使用$stateCodes[0][0],但通常FETCH_ASSOC 更具可读性
猜你喜欢
  • 1970-01-01
  • 2014-11-05
  • 2011-02-15
  • 1970-01-01
  • 2011-04-13
  • 2013-12-27
  • 2018-06-22
  • 2018-07-20
  • 2014-04-28
相关资源
最近更新 更多