Ако искате да използвате 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