Diese Fehlermeldung wird angezeigt, wenn Sie einen Fehler in Ihrer Abfrage haben, der sie zum Scheitern gebracht hat. Sie wird angezeigt, wenn Sie verwenden:
mysql_fetch_array
/ mysqli_fetch_array()
mysql_fetch_assoc()
/ mysqli_fetch_assoc()
mysql_num_rows()
/ mysqli_num_rows()
Hinweis : Dieser Fehler ist pas erscheinen, wenn keine Zeilen von Ihrer Abfrage betroffen sind. Nur eine Abfrage mit einer ungültigen Syntax erzeugt diesen Fehler.
Schritte zur Fehlersuche
-
Stellen Sie sicher, dass Ihr Entwicklungsserver so konfiguriert ist, dass alle Fehler angezeigt werden. Sie können dies tun, indem Sie dies an den Anfang Ihrer Dateien oder in Ihre Konfigurationsdatei setzen: error_reporting(-1);
. Wenn Sie Syntaxfehler haben, werden Sie darauf hingewiesen.
-
使用方法 mysql_error()
. mysql_error()
meldet alle Fehler, auf die MySQL bei der Ausführung Ihrer Abfrage gestoßen ist.
Beispielhafte Verwendung:
mysql_connect($host, $username, $password) or die("cannot connect");
mysql_select_db($db_name) or die("cannot select DB");
$sql = "SELECT * FROM table_name";
$result = mysql_query($sql);
if (false === $result) {
echo mysql_error();
}
-
Führen Sie Ihre Abfrage über die MySQL-Befehlszeile oder ein Tool wie phpMyAdmin . Wenn Sie einen Syntaxfehler in Ihrer Abfrage haben, wird Ihnen dieser angezeigt.
-
Vergewissern Sie sich, dass Ihre Zitate korrekt sind. Ein fehlendes Anführungszeichen um die Abfrage oder einen Wert kann dazu führen, dass eine Abfrage fehlschlägt.
-
Vergewissern Sie sich, dass Sie Ihre Werte escapen. Anführungszeichen in Ihrer Abfrage können dazu führen, dass eine Abfrage fehlschlägt (und Sie außerdem anfällig für SQL-Injections sind). Verwenden Sie mysql_real_escape_string()
um Ihrer Eingabe zu entgehen.
-
Achten Sie darauf, dass Sie nicht die mysqli_*
y mysql_*
Funktionen. Sie sind nicht dasselbe und können nicht zusammen verwendet werden. (Wenn Sie sich für das eine oder das andere entscheiden, bleiben Sie bei mysqli_*
. Siehe unten, warum.)
Andere Tipps
mysql_*
Funktionen sollten nicht für neuen Code verwendet werden. Sie werden nicht mehr gepflegt und die Gemeinschaft hat begonnen, die Abnutzungsprozess . Stattdessen sollten Sie lernen über vorbereitete Erklärungen und verwenden Sie entweder PDO o MySQLi . Wenn Sie sich nicht entscheiden können, dieser Artikel wird bei der Auswahl helfen. Wenn Sie lernen möchten, hier ist gutes PDO-Tutorial .
15 Stimmen
Sie können weitere nützliche eroor msg erhalten, indem Sie:: QUERY oder die(mysql_error());
124 Stimmen
Auch der obligatorische Hinweis: Ihr Code ist anfällig für SQL-Einschleusung . Sie sollten die Benutzereingaben validieren und/oder ausblenden. Werfen Sie einen Blick auf
mysql_real_escape_string
. Vertrauen Sie niemals auf Benutzerdaten.7 Stimmen
Eigentlich wird der Code des OPs einen Syntaxfehler auf dem MySQL-Server verursachen, aber zumindest ist er pas anfällig für SQL Injection, da bei einfachen Anführungszeichen keine Variableninterpolation möglich ist.
4 Stimmen
@FelixKling Mir ist klar, dass dieser Artikel schon sehr alt ist und zum damaligen Zeitpunkt wahrscheinlich am genauesten war, aber Ihr Kommentar ist jetzt in einer Hinsicht gefährlich falsch:
mysql_real_escape_string
ist nicht das A und O des SQL-Injection-Schutzes; er ist immer noch anfällig für eine Reihe von Angriffen. (Nein, Sie haben nie gesagt, dass es perfekt ist, aber Sie haben angedeutet, dass es die einzige erforderliche Lösung ist) Die beste Lösung ist jetzt PDO, soweit ich weiß.0 Stimmen
@NicHartley Um Ihren Kommentar zu ergänzen: aquí sind Beschreibungen, wie das funktionieren würde.
2 Stimmen
Oh, Gott. Diese Frage auf MySQLi und PDO auszudehnen war eine schlechte Idee. Sie haben jeweils ihre eigene, leicht unterschiedliche Syntax und Fehlermeldungen und hätten durchaus eine eigene Frage verdient. Alles in einer riesigen dreiteiligen Frage zusammenzufassen, macht diese Frage nur weniger googelbar und zwingt Leute, die hierher kommen, sich durch irrelevante Inhalte zu wühlen, um zu dem zu kommen, was sie wollen. Außerdem werden dadurch viele der unten stehenden Antworten ungültig, und die Frage ist nach unseren üblichen Maßstäben "zu breit". Meiner Meinung nach ist es ein Chaos, aber es ist zu spät, um es jetzt zu ändern.
1 Stimmen
Neben dem ersten Fehler hätte das, was Sie gepostet haben, einen weiteren Fehler ausgelöst, und zwar für
LIKE $username
da wir es hier höchstwahrscheinlich mit einer Zeichenkette und nicht mit einer ganzen Zahl zu tun haben. Daher würde es erfordern, dass es in Anführungszeichen gesetzt wird.1 Stimmen
Für alle, die hierher kommen und MySQLi verwenden: Bitte lesen Sie stattdessen diesen Beitrag: Wie kann ich die Fehlermeldung in MySQLi erhalten?