为什么我的方法只返回表格的第一行?我无法理解为什么,它让我疯狂。我确信这很简单。
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;
}
感谢。
答案 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