$ result-> num_rows始终返回0

时间:2014-03-14 19:27:59

标签: php mysql sql mysqli mysql-num-rows

阅读了大量的线程,教程和其他内容 - 我想在这里发帖,并希望有人可以帮助我。 我尝试了所有可以得到的建议,但它仍然无效。

这是我的代码:

$prep_stmt = "SELECT id, DATE_FORMAT(added,'%d.%M'), title FROM offers ORDER BY added DESC LIMIT ?, ?;";
$stmt = $mysqli->prepare($prep_stmt);
$stmt->bind_param ('ii',$lowlimit, $page);
$stmt->execute();
$stmt->bind_result($id, $added, $title);
while ($stmt->fetch()) {
... # some random output here
}
$count = $stmt->num_rows;
echo "c -> ". $count;exit;

我总是得到" c - > 0" ......但是已经输出了......所以我做错了什么? :/

3 个答案:

答案 0 :(得分:3)

在访问store_result()属性之前,您需要调用num_rows方法。

来自对PHP manual documentation的评论:

  

如果不使用mysqli_stmt_store_result(),并在执行预准备语句后立即调用此函数,则此函数通常会返回0,因为它无法知道结果集中有多少行作为结果集尚未保存在内存中。

     

mysqli_stmt_store_result()将结果集保存在内存中,因此您可以在执行语句并保存结果集后立即使用此函数。

您的代码应如下所示:

$stmt->execute();
$stmt->store_result();

$stmt->bind_result($id, $added, $title);

while ($stmt->fetch()) {
    # some random output here...
}

$count = $stmt->num_rows;

答案 1 :(得分:2)

取自php.net你必须先存储它。

$stmt->store_result();
$count = $stmt->num_rows

答案 2 :(得分:-1)

从PHP手册中,首先评论http://fr2.php.net/manual/fr/mysqli-stmt.num-rows.php

  

请注意,对于有时会错过阅读此功能的重要手册条目的人:

     

如果你不使用mysqli_stmt_store_result()和immediatley调用   执行准备好的语句后,此函数将执行此功能   通常返回0,因为它无法知道有多少行   结果集,因为结果集尚未保存在内存中。

     

mysqli_stmt_store_result()将结果集保存在内存中   你可以在执行语句后立即使用这个函数   并保存结果集。

     

如果您不保存结果集但仍想使用此功能   你必须实际循环遍历结果集一行一行   在使用此函数确定之前使用mysqli_stmt_fetch()   行数。

     

但是想一想,如果你想确定没有的行数   存储结果集并在循环之后,为什么不呢   每次一行时,只需在循环中保留一个内部计数器   获取并保存函数调用。

     

简而言之,只有保存结果时,此功能才真正有用   设置并希望在循环之前确定行数   它,否则你可以像我建议的那样重新创建它。