2016-10-06 2 views
0

Я в процессе преобразования моего сайта в подготовленные операторы (прежде чем я просто опирался на пользовательскую функцию, включающую mysqli_real_escape_string, среди прочего), но когда я запускаю код, я всегда получаю нуль записей. Я знаю, что SQL в порядке, потому что я могу запустить SQL в инструменте workbench MySQL и возвращать несколько записей. Вот мой код:Подготовленные операторы: num_rows всегда ноль

<?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

Проблема на самом деле документально в PHP документ для 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; 
0

Моя проблема была решена путем изменения

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

в

$stmt->execute(); 
$stmt->store_result(); 
$stmt->bind_result($itemname); 
Смежные вопросы