在使用$ stmt之前检查结果 - >取()

时间:2013-01-15 21:44:18

标签: php mysql mysqli

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

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

如果$ stmt - &gt;我只想执行。 fetch()返回至少一行(这是一个SELECT查询)..但是如果我这样做

if ($stmt -> fetch())

它已经执行了一次,我想避免这种情况。任何线索?

提前致谢。

4 个答案:

答案 0 :(得分: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() ); 
}

答案 1 :(得分:2)

我认为你必须至少一次查询数据库以获得计数。

答案 2 :(得分:0)

致电

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

您正在进行正确的检查,do stuff部分仅在有多个结果的情况下才会出现。所以你已经做了你需要做的一切。

即。只有当echo大于0时才会出现numRows

答案 3 :(得分:-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.