可能是一个愚蠢的问题。我有以下代码:
while ($stmt -> fetch()) {
echo "<p><strong>" .$name. "</strong><br />" .$comment. "</p>";
}
我只想在 $stmt -> fetch() 返回至少一行(这是一个 SELECT 查询)时执行 while .. 但如果我这样做
if ($stmt -> fetch())
它已经执行了一次,我想避免这种情况。有什么线索吗?
提前致谢。
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() );
}
我认为您必须至少查询一次数据库才能获得计数。
通过调用
while( $stmt->fetch() ) {
// do stuff
}
您已经进行了正确的检查,并且do stuff
只有在有多个结果时才会出现该部分。所以你已经在做你需要做的一切。
即你echo
只会发生numRows
大于0。
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.