当我在while()语句中放入$ statement-> fetchColumn()时,为什么我会得到FALSE?

时间:2017-07-02 09:52:30

标签: php pdo

$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

1 个答案:

答案 0 :(得分:0)

来自the doc

  

PDOStatement::fetchColumn()会从结果集的下一行返回单个列,如果没有其他行,则返回 FALSE。

由于您的SQL查询select count(*) from myMenu只返回一行,因此while()循环只执行一次而不是六次。这是因为在while循环的第一次迭代之后,->fetchColumn();语句将返回false而不是列值(因为没有剩余的行)。