准备好的陈述:num_rows始终为零

时间:2016-10-06 09:41:41

标签: php mysql mysqli prepared-statement

我正在将我的网站转换为准备好的语句(在我依赖包含mysqli_real_escape_string之类的自定义函数之前),但是当我运行代码时,我总是得到零记录。我知道SQL很好,因为我可以在MySQL工作台工具中运行SQL并返回几条记录。这是我的代码:

<?php
$link = new mysqli($server,$dbusername,$dbpassword,$database);
if($link->connect_error){
    die($link->connect_error);
}

$sql = "select itemname from items where itemcategory = ?";
//if(!$query = mysqli_query($link, $sql)) die(mysqli_error($link));
if(!$stmt = $link->prepare($sql)) die("Error");

$stmt->bind_param("i", $category); //replace question mark with category id
$stmt->execute();
$stmt->bind_result($itemname);
//$numitems = mysqli_num_rows($query);
$numitems = $stmt->num_rows;

if($numitems>0){
    //while($array = mysqli_fetch_array($query)){
    while($stmt->fetch()) {
        echo $itemname."<br>";
    }
}
$stmt->close();
?>

$stmt->num_rows总是0.我做错了什么?

2 个答案:

答案 0 :(得分:0)

通过更改

解决了我的问题
$stmt->execute();
$stmt->bind_result($itemname);

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

答案 1 :(得分:0)

问题实际上记录在mysqli_stmt_num_rows

的php文档中
  

返回结果集中的行数。 mysqli_stmt_num_rows()的使用取决于您是否使用mysqli_stmt_store_result()来缓冲语句句柄中的整个结果集。

因为结果没有转移到语句句柄,所以无法正确计算行数。这就是为什么解决方案就像你提到的那样:

$stmt->execute();
$stmt->store_result();
$stmt->bind_result($itemname);
$numitems = $stmt->num_rows;