$statement = $db->query("select count(*) from myMenu");
$count = 0;
while($count < $statement->fetchColumn())
{
var_dump($statement->fetchColumn()); //bool(false)
echo"d";
$count += 1;
}
//echo : d
myMenu表有6列,但是当我运行上面的代码时,while()只执行一次。
我甚至删除了var_dump(),但它仍然是相同的。
要解决这个问题,我将$ statement-&gt; fetchColumn()放在$ count变量中,如下所示:
$statement = $db->query("select count(*) from myMenu");
$count = 0;
$count_max = $statement->fetchColumn();
while($count < $count_max)
{
echo"d";
$count += 1;
}
//echo : dddddd
然后输出很好。
我在第一段代码中做错了什么?
即使我阅读了php.net的手册,我也听不懂: http://php.net/manual/en/pdostatement.fetchcolumn.php
答案 0 :(得分:0)
来自the doc,
PDOStatement::fetchColumn()
会从结果集的下一行返回单个列,如果没有其他行,则返回 FALSE。
由于您的SQL查询select count(*) from myMenu
只返回一行,因此while()
循环只执行一次而不是六次。这是因为在while
循环的第一次迭代之后,->fetchColumn();
语句将返回false
而不是列值(因为没有剩余的行)。