Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Die von mysqli vorbereitete Anweisung num_rows gibt 0 zurück, während die Abfrage größer als 0 zurückgibt

Wenn Sie eine Anweisung über mysqli ausführen, sind die Ergebnisse nicht wirklich in PHP, bis Sie sie abrufen – die Ergebnisse werden von der DB-Engine gespeichert. Also die mysqli_stmt Objekt hat keine Möglichkeit zu wissen, wie viele Ergebnisse es unmittelbar nach der Ausführung gibt.

Ändern Sie Ihren Code wie folgt:

$stmt->execute();
$stmt->store_result(); // pull results into PHP memory

// now you can check $stmt->num_rows;

Siehe Handbuch

Dies gilt nicht für Ihr spezielles Beispiel, aber wenn Ihre Ergebnismenge groß ist, $stmt->store_result() wird viel Speicher verbrauchen. Wenn Sie in diesem Fall nur herausfinden möchten, ob mindestens ein Ergebnis zurückgegeben wurde, speichern Sie keine Ergebnisse. Prüfen Sie stattdessen einfach, ob die Ergebnismetadaten nicht null sind:

$stmt->execute();
$hasResult = $stmt->result_metadata ? true : false;

Siehe Handbuch