prepared语句:num\u行总是零

bweufnob  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(376)

这个问题在这里已经有答案了

为什么mysqli num\u行总是返回0(2个答案)
四年前关门了。
我正在将我的站点转换为准备好的语句(之前我只是依赖一个自定义函数,其中包括mysqli\u real\u escape\u 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。我做错什么了?
blpfk2vs

blpfk2vs1#

我的问题通过改变来解决

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

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

nvbavucw2#

这个问题实际上是在php文档中记录的 mysqli_stmt_num_rows 返回结果集中的行数。mysqli \u stmt \u num \u rows()的使用取决于是否使用mysqli \u stmt \u store \u result()来缓冲语句句柄中的整个结果集。
因此,由于结果尚未传输到语句句柄,因此无法正确计算行。这就是为什么解决方案像你提到的那样:

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

相关问题