Kiedy wykonujesz instrukcję przez mysqli, wyniki nie są w rzeczywistości w PHP, dopóki ich nie pobierzesz - wyniki są przechowywane przez silnik DB. Więc mysqli_stmt
obiekt nie ma możliwości sprawdzenia, ile jest wyników natychmiast po wykonaniu.
Zmodyfikuj swój kod w ten sposób:
$stmt->execute();
$stmt->store_result(); // pull results into PHP memory
// now you can check $stmt->num_rows;
Nie dotyczy to konkretnego przykładu, ale jeśli zestaw wyników jest duży, $stmt->store_result()
zużyje dużo pamięci. W takim przypadku, jeśli zależy Ci tylko na ustaleniu, czy przynajmniej jeden wynik został zwrócony, nie przechowuj wyników; zamiast tego po prostu sprawdź, czy metadane wyników nie są puste:
$stmt->execute();
$hasResult = $stmt->result_metadata ? true : false;