Während der PHP -Entwicklung begegnen wir häufig auf diese Situation: Verwenden von MySQLi_Connect () oder PDO , um eine erfolgreiche Verbindung zur Datenbank herzustellen, jedoch Fehler bei der Ausführung von SQL -Abfragen wie Rückgabe von Falsch, keine Ergebnisse und sogar Programmabstürzen zu begegnen. Dieses Problem mag ein Problem mit Datenbankverbindungen auf den ersten Blick erscheinen, aber die Ursache kann in der Realität sehr kompliziert sein. In diesem Artikel werden Sie die möglichen Ursachen dieses Phänomens nacheinander analysieren und entsprechende Lösungen bereitstellen.
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("Verbindung ist fehlgeschlagen: " . $mysqli->connect_error);
}
echo "Verbindung erfolgreich";
Auch wenn der obige Code erfolgreich "Verbindung erfolgreich" ausgibt, bedeutet dies nicht, dass Ihre nachfolgenden Abfragebetriebe definitiv nicht schief gehen werden. Eine erfolgreiche Datenbankverbindung ist nur ein Kommunikationskanal, aber ob dieser Kanal bestimmte SQL -Vorgänge normalerweise durch viele andere Faktoren beeinflusst werden kann.
Einer der häufigsten Gründe ist, dass SQL falsch geschrieben ist. Auch wenn ein Zitat fehlt und der Feldname falsch geschrieben ist, wird die Abfrage fehlschlagen.
$sql = "SELEC * FROM users"; // Falsche Schlüsselwörter SELEC
$result = $mysqli->query($sql);
if (!$result) {
echo "Abfrage fehlgeschlagen: " . $mysqli->error;
}
Lösung : Ausgabe $ MySQLI-> Fehler zum Anzeigen der Fehlerdetails und sorgfältig prüfen, ob die SQL-Anweisung korrekt geschrieben ist.
Auch wenn die Verbindung erfolgreich ist, hat der Benutzer möglicherweise keine Berechtigung, bestimmte Operationen auszuführen, z. B. das Lesen einer bestimmten Tabelle, das Einfügen von Daten usw.
// Wenn der Benutzer keine Tabelle hat SELECT Berechtigungen
$sql = "SELECT * FROM admin_logs";
$result = $mysqli->query($sql);
if (!$result) {
echo "Berechtigungen问题: " . $mysqli->error;
}
Lösung : Überprüfen Sie die Berechtigungen des Datenbankbenutzers und verwenden Sie den folgenden Befehl, um anzuzeigen:
SHOW GRANTS FOR 'user'@'localhost';
Wenden Sie sich bei Bedarf an den DBA, um die Erlaubnis zu aktivieren.
Wenn die angeschlossene Datenbank vorhanden ist, der Versuch, jedoch nicht auf eine Tabelle zuzugreifen, die nicht vorhanden ist, wird auch die Abfrage fehlschlagen.
$sql = "SELECT * FROM nonexistent_table";
$result = $mysqli->query($sql);
Lösung : Um zu bestätigen, ob die Tabelle vorhanden ist, können Sie die folgende Anweisung verwenden:
SHOW TABLES LIKE 'nonexistent_table';
Unsachgemäße Einstellungen für die Zeichensatze können dazu führen, dass chinesische oder Sonderzeichen einfügt werden, und sogar Ausnahmen von Abfragen.
$mysqli->set_charset("utf8mb4"); // Stellen Sie sicher, dass Sie den richtigen Zeichensatz verwenden
Lösung : Halten Sie beim Einstellen des Zeichensatzes die Client-, Verbindungs- und Datenbankkonsistent.
Bei Verwendung von Vorverarbeitungsanweisungen tritt bei der Ausführungsfehler auf, wenn die Parameter nicht korrekt gebunden sind:
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("s", $id); // Falsch Datentyp oder nicht zugewiesener Parameter
$id = 123;
$stmt->execute();
Problemumgehung : Stellen Sie sicher, dass die Variable vor dem Binden der Parameter korrekt initialisiert wird und dass der Datentyp übereinstimmt.
Einige Abfragen laufen zu lang und können vom Datenbankserver automatisch unterbrochen oder zeitlich ausgeführt werden.
Lösung : Optimieren Sie SQL-Anweisungen, um zu überprüfen, ob Indizes verwendet werden, und um langfristige Blockierungsvorgänge zu vermeiden.
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
Diese Einstellung löst eine Ausnahme aus, wenn ein Fehler auftritt, sodass die Probleme einfacher werden können.
file_put_contents("log.txt", $mysqli->error . "\n", FILE_APPEND);
Notieren Sie jeden Fehler, um die Analyse von Häufigkeit und Regeln zu erleichtern.
Wenn Ihre Abfrage beispielsweise eine URL -Anforderung enthält, wenn Sie eine Remote -Schnittstelle aufrufen:
$url = "https://api.m66.net/getData.php";
$data = file_get_contents($url);
Stellen Sie sicher, dass die URL zugänglich ist, der Rückgabeinhalt korrekt ist und keine Umleitung oder ein 403 -Fehler.
Obwohl der erfolgreiche Connect () angibt, dass die Datenbankverbindung normal ist, bedeutet "normale Verbindung" nicht "erfolgreicher Betrieb". Die Hauptursache für Abfragen ist häufig die Berechtigungen, Syntax-, Tabellenstruktur-, Zeichensatz- oder Parameterprobleme. Durch systematisches Überprüfen von Fehlerinformationen, das Einschalten von Fehlerberichten, die Optimierung der Abfragelogik und die Berechtigungskonfiguration können die meisten Probleme mit Abfragen effektiv gelöst werden.
Es ist wichtig zu erinnern: Verbindung ist nur der Ausgangspunkt, und die Abfrage ist der Schlüssel.