PHP / MySQL:为什么我的查询只返回第一行?

时间:2012-02-20 14:58:34

标签: php mysql arrays methods

为什么我的方法只返回表格的第一行?我无法理解为什么,它让我疯狂。我确信这很简单。

public function getTitlesForRegistrationForm() {
    $result = $this->_db->query("SELECT UserTitleID, UserTitleName FROM UserTitles");
    $i=0;
    $array[0] = "No result";
    foreach($result->fetch(PDO::FETCH_ASSOC) as $row){
        $array[$i] = $row;
        $i++;
    }
    return $array;
}

感谢。

6 个答案:

答案 0 :(得分:7)

可能是因为您的$result->fetch()调用未返回可迭代值,而是返回结果行或FALSE。 PHP的foreach仅适用于可迭代值。将代码更新为类似的东西应该可以解决问题:

public function getTitlesForRegistrationForm() {
    $result = $this->_db->query("SELECT UserTitleID, UserTitleName FROM UserTitles");
    $i=0;
    $array[0] = "No result";
    while (($row = $result->fetch(PDO::FETCH_ASSOC)) !== FALSE) {
        $array[$i] = $row;
        $i++;
    }
    return $array;
}

答案 1 :(得分:3)

您需要在fetch()循环中while。每次调用它时,它只返回一行。

我也冒昧地重构你的$i柜台。而是将No result附加到第一个位置的数组中(出于您计划使用它的任何目的),随后的行附加[]

public function getTitlesForRegistrationForm() {
    $array = array();
    $result = $this->_db->query("SELECT UserTitleID, UserTitleName FROM UserTitles");

    // Why are you putting No Result onto the array?
    // I've left it in, but it doesn't make sense to me.
    $array[] = "No result";
    while ($row = $result->fetch(PDO::FETCH_ASSOC)){
        $array[] = $row;
    }
    return $array;
}

答案 2 :(得分:3)

这是因为您使用的是fetch()。您需要fetchall()

http://www.php.net/manual/en/pdostatement.fetchall.php

[编辑]哇。我需要学会更快地打字。

答案 3 :(得分:2)

尝试:

while($row = $result->fetch(PDO::FETCH_ASSOC)){
    foo();
}

答案 4 :(得分:2)

尝试而不是foreach。 Foreach仅迭代返回的单个行。 代码:

while($row = fetch(PDO::FETCH_ASSOC)) {
  $array[$i] = $row;
  $i++;
}

答案 5 :(得分:2)

只需将fetch方法替换为fetchAll

即可