我正在将我的网站转换为准备好的语句(在我依赖包含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.我做错了什么?
答案 0 :(得分:0)
通过更改
解决了我的问题$stmt->execute();
$stmt->bind_result($itemname);
到
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($itemname);
答案 1 :(得分:0)
问题实际上记录在mysqli_stmt_num_rows
返回结果集中的行数。 mysqli_stmt_num_rows()的使用取决于您是否使用mysqli_stmt_store_result()来缓冲语句句柄中的整个结果集。
因为结果没有转移到语句句柄,所以无法正确计算行数。这就是为什么解决方案就像你提到的那样:
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($itemname);
$numitems = $stmt->num_rows;