Aktueller Standort: Startseite> Neueste Artikel> Warum gibt Num_rows 0 zurück? Analyse häufiger Missverständnisse

Warum gibt Num_rows 0 zurück? Analyse häufiger Missverständnisse

M66 2025-05-31

Bei der Abfrage von Datenbanken mithilfe von MySQLI -Erweiterungen werden viele Entwickler auf eine verwirrende Frage stoßen: Was ist los? Dieser Artikel hilft Ihnen dabei, gemeinsame Missverständnisse zu sortieren und die Hauptursache des Problems zu finden.

Missverständnis 1: Mysqli_Multi_query wurde verwendet

MySQLi_Multi_Query ist eine Methode, die mehrere SQL -Anweisungen gleichzeitig ausführen kann, aber ein boolescher Wert zurückgibt. Das reale Ergebnissatz wird über mysqli_store_result oder mySQLI_USEL_RESULT erhalten.

Beispielcode:

 <?php
$mysqli = new mysqli("localhost", "user", "password", "database");

$sql = "SELECT * FROM users; SELECT * FROM products;";
if ($mysqli->multi_query($sql)) {
    do {
        if ($result = $mysqli->store_result()) {
            echo "Aktuelle Ergebnismenge Zeilenzahl: " . $result->num_rows . "<br>";
            $result->free();
        }
    } while ($mysqli->more_results() && $mysqli->next_result());
}
?>

Wenn Sie versuchen, num_rows mit dem Multi_Query -Rückgabewert aufzurufen, erhalten Sie natürlich 0. Stellen Sie sicher, dass Sie das Ergebnis -Set -Objekt richtig erhalten.

Missverständnis 2: Ich habe vergessen, die Abfrage auszuführen

Einige Entwickler haben $ stmt = $ mysqli-> vorbereiten (...) und dann direkt $ stmt-> num_rows verwendet, aber Hinweis: Vorbereitung führt keine Abfragen aus, sondern nur die Vorbereitung.

Die Abfrage muss zuerst ausgeführt werden und das Ergebnis muss erzielt werden:

 <?php
$stmt = $mysqli->prepare("SELECT * FROM users WHERE age > ?");
$stmt->bind_param("i", $age);
$age = 18;
$stmt->execute();
$result = $stmt->get_result();
echo "Anzahl der Zeilen: " . $result->num_rows;
?>

Wenn Sie ausführen oder get_result überspringen, kann Num_rows keine Möglichkeit haben, darüber zu sprechen.

Missverständnis 3: Ungepufferte Abfrage wurde verwendet

Standardmäßig verwendet MySQLI gepufferte Abfragen, und Sie können Num_rows direkt verwenden. Wenn Sie jedoch den MySQLI_USE_RESULT -Modus verwenden, wird das Ergebnissatz gestreamt, und MySQL kann die Gesamtzahl der Zeilen nicht berechnen, bevor es durchquert wird.

Beispiel:

 <?php
$result = $mysqli->query("SELECT * FROM users", MYSQLI_USE_RESULT);
echo $result->num_rows; // Fehler:此时无法获取Anzahl der Zeilen

Die Lösung besteht darin, den Standardpuffermodus zu verwenden oder die Statistiken selbst durchzusetzen.

Missverständnis 4: Missverständnis der Bedeutung von num_rows

Viele Menschen glauben fälschlicherweise, dass num_rows in Einfügen , Aktualisieren und Löschen von Abfragen verwendet werden können. Tatsächlich haben diese Vorgänge keine Ergebnismenge, daher sollten Sie $ mySQLI-> betroffene_Rows verwenden.

 <?php
$mysqli->query("UPDATE users SET status = 'active' WHERE last_login > NOW() - INTERVAL 30 DAY");
echo "受影响的Anzahl der Zeilen: " . $mysqli->affected_rows;
?>

Denken Sie daran: Nur der von der Auswahlabfrage erzeugte Ergebnissatz hat num_rows .

Zusammenfassung

Wenn Sie auf num_rows stoßen, gibt es immer zuerst 0 zurück:

? Haben Sie Multi_Query verwendet, aber das Ergebnissatz nicht erhalten?
? Haben Sie vergessen, nach der Vorbereitung auszuführen und zu get_result ?
? Haben Sie den ungereinten Modus verwendet?
? Hast du den Abfragetyp falsch verstanden?

Indem Sie diese Missverständnisse vermeiden, können Sie MySQLI_Result und Num_Rows richtig verwenden und Umwege vermeiden.