Ако искате да използвате mysqli_stmt::$num_rows (тоест проверете броя на редовете в подготвеното изявление), трябва да използвате $stmt->store_result() след изпълнение на подготвения оператор, преди да може да провери броя на редовете. Това означава, че резултатът се съхранява в паметта, преди да проверим колко реда са върнати.
$stmt = $conn->prepare($sql);
$stmt->bind_param('ss',$log_username,$log_username);
$stmt->execute();
$stmt->store_result(); // Need to store the result into memory first
if ($stmt->num_rows) {
// ...
Ако обаче искате да използвате mysqli_result::$num_rows (в MySQLi-резултата, който преобразувате от резултата от израза), трябва да направите това, след като направите $result = $stmt->get_result(); и използвайте $result->num_rows; , както е показано по-долу.
$stmt = $conn->prepare($sql);
$stmt->bind_param('ss',$log_username,$log_username);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows) {
while ($row = $result->fetch_assoc()) {
// ....
В крайна сметка и двамата трябва да направят едно и също нещо - да предоставят определен брой редове, върнати от първоначално подготвената заявка.
Забележка
Важно е да се отбележи, че не можете да използвате store_result() и get_result() на същото изявление. Което означава, че в първия пример не можете да конвертирате в обект mysqli-result (чрез използване на get_result() , което ви позволява да използвате стандартния fetch_assoc() метод). Като store_result() съхранява резултата в паметта, няма нищо за get_result() за преобразуване и обратно.
Това означава, че ако използвате store_result() , трябва да извлечете чрез израза-извличане, mysqli_stmt::fetch() и обвържете резултатите чрез mysqli_stmt::bind_result() . Ако използвате get_result() , трябва да проверите броя на редовете в получения обект MySQLi-result (както е показано във втория пример).
Затова трябва да изградите своя код така, че да трябва да използвате само един от тях.
Като се има предвид това, използвайки affected_rows както е предложено в коментарите, не е правилният инструмент за работата - според ръководството на mysqli_stmt::$affected_rows (същото важи и за обикновена заявка, mysqli::$affected_rows ):
- PHP.net на
mysqli_stmt::store_result() - PHP.net на
mysqli_stmt::get_result() - PHP.net на
mysqli_stmt::$num_rows