为什么fetch_all语句之后fetch语句没有任何值?

时间:2017-06-29 05:09:21

标签: php mysql pdo

我想在循环中输出myTable的myTable和输出field1的数量。

但是,如果我运行以下代码,则只会打印10'test:'。

如果我删除[$rows = $statement->fetchAll(PDO::FETCH_ASSOC);]并将$count of for()更改为10,则可以正常使用,但这不是我想要的。

<?php
$db = new PDO("mysql:host=localhost;dbname=mydb;charset=utf8;", myid, mypw);
$statement = $db->query('select field1 from myTable limit 10');
$rows = $statement->fetchAll(PDO::FETCH_ASSOC);
$count = count($rows);
echo "count : $count<br><br>";
for($i = 0; $i < $count; $i++)
{
    $row = $statement->fetch(PDO::FETCH_ASSOC);
    echo 'test : '.$row['field1'].'<br>';
}
?>

我想避免以下方法来计算myTable的数量。因为不必要地添加看起​​来相似的查询语句。

$count = $db->query('SELECT count(*) FROM qudtls_mutter')->fetchColumn();

2 个答案:

答案 0 :(得分:0)

结果,来自

$rows = $statement->fetchAll(PDO::FETCH_ASSOC);

将是关联数组,您需要计算。

您只需使用$statement->rowCount():int即可返回上次查询的计数。

然后您可以将其与FOR

混合使用
for ($i=0; $i<$statement->rowCount(); $i++) {

}

对于其他用途,您可以使用WHILE

while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {

}

使用foreach,只需:

foreach ($statment as $row) {

}

答案 1 :(得分:0)

$db = new PDO("mysql:host=localhost;dbname=mydb;charset=utf8;", myid, mypw);
$statement = $db->query('select field1 from myTable limit 10');
$rows = $statement->fetchAll(PDO::FETCH_ASSOC);

如上所述,上述十行的 fetch All 结果集中现在不再有fetch 行。这是可以预期的。

改变这个:

for ($i = 0; $i < $count; $i++) {
    $row = $statement->fetch(PDO::FETCH_ASSOC);

到此:

foreach ($rows as $i => $row) {

让它工作。在fetchAll您已经拥有所有行后,您无需再次获取它们,如果您尝试,它将无效。

如果要输出整个表,请不要fetchAll,而是在没有任何内容的情况下获取。删除fetchAll,并:

$i = 0;
while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
    $i++;
    // This will execute for all rows. It will exit as soon as fetch() returns null at the end of the query.