после чтения тонны нитей, учебников и т. д. – мне нравится размещать здесь и надеюсь, что кто-то может мне помочь. Я пробовал каждый совет, который мог получить, но он все еще не работает.
Вот мой код:
$prep_stmt = "SELECT id, DATE_FORMAT(added,'%d.%M'), title FROM offers ORDER BY added DESC LIMIT ?, ?;"; $stmt = $mysqli->prepare($prep_stmt); $stmt->bind_param ('ii',$lowlimit, $page); $stmt->execute(); $stmt->bind_result($id, $added, $title); while ($stmt->fetch()) { ... # some random output here } $count = $stmt->num_rows; echo "c -> ". $count;exit;
Я всегда получаю «c -> 0» … но там IS output уже … так что я делаю неправильно? : /
Вы должны вызвать метод store_result()
перед доступом к свойству num_rows
.
Из комментария к документации по PHP :
Если вы не используете
mysqli_stmt_store_result()
и сразу вызываете эту функцию после выполнения подготовленного оператора, эта функция обычно возвращает 0, поскольку она не имеет способа узнать, сколько строк находится в результирующем наборе, поскольку результирующий набор не сохраняется в памяти все же.
mysqli_stmt_store_result()
сохраняет результирующий набор в памяти, поэтому вы можете сразу использовать эту функцию после того, как вы оба выполните инструкцию AND сохраните набор результатов.
Ваш код должен выглядеть так:
$stmt->execute(); $stmt->store_result(); $stmt->bind_result($id, $added, $title); while ($stmt->fetch()) { # some random output here... } $count = $stmt->num_rows;
Взято с php.net. Сначала вы должны сохранить его.
$stmt->store_result(); $count = $stmt->num_rows
Из руководства по PHP, первый комментарий http://fr2.php.net/manual/fr/mysqli-stmt.num-rows.php :
Пожалуйста, имейте в виду, что люди, которые иногда пропускают эту важную запись в руководстве для этой функции:
Если вы не используете mysqli_stmt_store_result () и сразу вызываете эту функцию после выполнения подготовленного оператора, эта функция обычно возвращает 0, поскольку она не имеет способа узнать, сколько строк находится в результирующем наборе, поскольку результирующий набор не сохраняется в памяти все же.
mysqli_stmt_store_result () сохраняет результирующий набор в памяти, поэтому вы можете сразу использовать эту функцию после того, как вы оба выполните инструкцию AND сохраните набор результатов.
Если вы не сохраните набор результатов, но все же хотите использовать эту функцию, вы должны фактически прокрутить результирующий набор по одной строке за раз, используя mysqli_stmt_fetch (), прежде чем использовать эту функцию для определения количества строк.
Однако мысль, если вы хотите определить количество строк без сохранения набора результатов и после его прохождения, почему бы просто не просто держать внутренний счетчик в вашем цикле каждый раз, когда строка извлекается и сохраняется вызов функции.
Короче говоря, эта функция действительно очень полезна, если вы сохраните набор результатов и хотите определить количество строк до его прокрутки, иначе вы можете в значительной степени воссоздать его использование, как я предложил.