Die MySQL -Erweiterung ist eine häufige Wahl, wenn Sie PHP verwenden, um MySQL -Datenbanken zu manipulieren. Nachdem Sie eine Abfrage ausgeführt haben, erhalten Sie normalerweise ein MySQLi_Result -Objekt, aber viele Entwickler ignorieren einen wichtigen Link: zu beurteilen, ob das Abfrageergebnis leer ist. In diesem Artikel wird ausführlich erklärt, wie man die Situation beurteilen und korrekt behandelt, in der das Abfrageergebnis leer ist.
Schauen wir uns zuerst ein einfaches Abfragebeispiel an:
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_errno) {
die("Verbindung ist fehlgeschlagen: " . $mysqli->connect_error);
}
$sql = "SELECT * FROM users WHERE status = 'active'";
$result = $mysqli->query($sql);
if (!$result) {
die("Abfrage fehlgeschlagen: " . $mysqli->error);
}
// Hier ist der Schlüssel Teil:Überprüfen Sie, ob es Ergebnisse gibt
if ($result->num_rows === 0) {
echo "Kein Benutzer, der die Kriterien erfüllt。";
} else {
while ($row = $result->fetch_assoc()) {
echo "Benutzername: " . htmlspecialchars($row['username']) . "<br>";
}
}
$result->free();
$mysqli->close();
?>
1 ?? Überprüfen Sie, ob $ Ergebnis falsch ist
Dies zeigt an, dass in der SQL Query -Anweisung selbst ein Fehler aufgetreten ist, z. B. ein Syntaxfehler oder die Tabelle nicht vorhanden. verwenden:
if (!$result) {
// Abfrage fehlgeschlagen,Handhabungsfehler
}
2 ?? Überprüfen Sie $ result-> num_rows
Wenn die Abfrage erfolgreich ist, aber keine passenden Zeilen übereinstimmen, ist Num_rows 0 . verwenden:
if ($result->num_rows === 0) {
// Abfrage ist leer,Keine Ergebnisse behandeln
}
3 ?? Vermeiden Sie es mit Fetch_assoc () direkt, um leere Ergebnisse zu bestimmen . <br> Viele Leute benutzen es direkt:
if ($row = $result->fetch_assoc()) { ... }
Diese Methode tritt nicht ohne Ergebnisse in die Schleife ein, aber es ist unmöglich, explizit zu unterscheiden, ob es sich um ein "leeres Ergebnis" oder "Es gibt eine Zeile, aber der Zustand wird nicht erfüllt". Es wird empfohlen, num_rows explizit zu überprüfen.
In den tatsächlichen Projekten reicht es nicht aus, "kein Ergebnis" direkt auszugeben. Sie können nach dem Szenario optimieren, z. B.:
Kehren Sie zu einer freundlichen schnellen Seite zurück;
Protokolle aufzeichnen, um die Analyse nach der Analyse zu erleichtern.
Springen Sie auf andere Seiten, wie zum Beispiel:
if ($result->num_rows === 0) {
header("Location: https://m66.net/no-results.html");
exit;
}