3

可能是一个愚蠢的问题。我有以下代码:

while ($stmt -> fetch()) {
    echo "<p><strong>" .$name. "</strong><br />" .$comment. "</p>";
}

我只想在 $stmt -> fetch() 返回至少一行(这是一个 SELECT 查询)时执行 while .. 但如果我这样做

if ($stmt -> fetch())

它已经执行了一次,我想避免这种情况。有什么线索吗?

提前致谢。

4

4 回答 4

8

http://php.net/manual/en/mysqli-stmt.num-rows.php

尝试使用$stmt->num_rows > 0

$stmt->store_result();
if( $stmt->num_rows > 0 )
{
    while( $stmt->fetch() ) {
        echo "<p><strong>" .$name. "</strong><br />" .$comment. "</p>";
    }
}

为什么mysqli_result有一个fetchAll功能而mysqli_stmt不是....我不知道。


更长,但可能有效

$result = $stmt->fetch();
if( !empty( $result )
{
    do
    {
        echo "<p><strong>" .$name. "</strong><br />" .$comment. "</p>";
    } while( $result = $stmt->fetch() ); 
}
于 2013-01-15T21:46:08.327 回答
2

我认为您必须至少查询一次数据库才能获得计数。

于 2013-01-15T21:49:52.063 回答
0

通过调用

while( $stmt->fetch() ) {
    // do stuff
}

您已经进行了正确的检查,并且do stuff只有在有多个结果时才会出现该部分。所以你已经在做你需要做的一切。

即你echo只会发生numRows大于0。

于 2013-01-15T21:53:24.943 回答
-2

rowCount()返回受 DELETE、INSERT 或 UPDATE 语句影响的行数。

<?php
/* Delete all rows from the FRUIT table */
$stmt= $dbh->prepare('DELETE FROM fruit');
$stmt->execute();

/* Return number of rows that were deleted */
$count = $stmt->rowCount();
print("Deleted $count rows.\n");
?>

上面的示例将输出:

   Deleted 9 rows.
于 2016-09-20T08:08:22.320 回答