2013-05-24 2 views
9

Я изучаю подготовленные операторы и пытаюсь работать с запросом, который дает несколько строк результатов. Прямо сейчас, я просто пытаюсь выяснить, как определить количество строк, а затем сделать отображение номера в html.Подготовленные утверждения - количество строк

Моя подготовленное заявление выглядит следующим образом:

if($stmt = $mysqli -> prepare("SELECT field1, field2, field3 FROM table WHERE id= ?ORDER BY id ASC")) 
    { 
    /* Bind parameters, s - string, b - blob, i - int, etc */ 
    $stmt -> bind_param("i", $id); 
    $stmt -> execute(); 

    /* Bind results */ 
    $stmt -> bind_result($testfield1, $testfield2, $testfield3); 

    /* Fetch the value */ 
    $stmt -> fetch(); 

    /* Close statement */ 
    $stmt -> close(); 
    } 

Я понимаю, что я должен сначала сохранить результаты, а затем использовать num_rows, как это:

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

Однако, я запускать и выпускать страницу с ошибкой, когда я помещаю туда этот код. Я даже не смог перейти к следующему шагу, как отображать число строк

Итак, вопрос: что мне не хватает в расчете количества строк внутри подготовленного оператора, а затем как я бы его отобразил с <?php echo '# rows: '.$WHATGOESHERE;?>

Спасибо!

ответ

12

num_rows возвращает номер, вы должны сохранить его в переменной.

/*.....other code...*/ 
$numberofrows = $stmt->num_rows; 
/*.....other code...*/ 

echo '# rows: '.$numberofrows; 

Так полный код должен быть что-то вроде этого:

if($stmt = $mysqli -> prepare("SELECT field1, field2, field3 FROM table WHERE id= ? ORDER BY id ASC")) 
    { 
    /* Bind parameters, s - string, b - blob, i - int, etc */ 
    $stmt -> bind_param("i", $id); 
    $stmt -> execute(); 

    /* Bind results */ 
    $stmt -> bind_result($testfield1, $testfield2, $testfield3); 

    /* Fetch the value */ 
    $stmt -> fetch(); 
    $numberofrows = $stmt->num_rows; 

    /* Close statement */ 
    $stmt -> close(); 
    } 
echo '# rows: '.$numberofrows; 
+0

Где это идет в подготовленном заявлении я отправил? После выполнения()? После bind_result или выборки? Это имеет значение? – Kevin

+0

@ Кевин Я так не верю. Просто убедитесь, что он идет после выполнения, и должно быть хорошо –

+0

О, и, кстати, вы забыли пробел между '?' И 'ORDER BY'. Я обновлю свой ответ, чтобы исправить это, –

-2

Заканчивать примера # 2 здесь: PHP.net

Использование PDO :: запроса() выдать SELECT COUNT (*) заявление с теми же предикаты, как предполагаемому ЗЕЬЕСТ, а затем использовать PDOStatement: : fetchColumn(), чтобы получить количество строк, которые будут возвращены. Затем ваше приложение может выполнить правильное действие.

Смежные вопросы