Fehler mysql_fetch_array(): Parameter 1 muss resource sein — Lösung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Der berüchtigte Fehler, bei dem man den Browser am liebsten schließen würde



Wenn Sie jemals in PHP eine Abfrage an MySQL geschrieben haben und plötzlich im Browser so etwas gesehen haben:



Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /var/www/site/index.php on line 15


...dann kennen Sie dieses Gefühl. Eigentlich scheint alles richtig: Verbindung hergestellt, Abfrage geschrieben, und trotzdem schreit PHP Sie rot an. Besonders ärgerlich, wenn der Code auf dem lokalen Server funktioniert, aber auf dem Hosting nicht. Oder umgekehrt.



Dieser Fehler ist einer der beliebtesten auf Stack Overflow. Tausende Entwickler (und wir gehören dazu) haben sich den Kopf an der Tastatur gestoßen und versucht zu verstehen: „Warum erwartet Parameter 1 einen resource, bekommt aber einen boolean?“



In diesem Artikel analysieren wir nicht nur die Ursache, sondern gehen den gesamten Weg: von der Reproduktion des Fehlers bis zu seiner Behebung. Und nebenbei sehen wir, warum die alten mysql_*-Funktionen längst durch moderne PDO oder MySQLi ersetzt werden sollten. Los geht's!



Wie das Problem in der Praxis aussieht



Lassen Sie uns eine Situation simulieren. Sie haben eine Tabelle users und möchten alle Benutzer ausgeben. Der Code ist altmodisch geschrieben:



$link = mysql_connect('localhost', 'user', 'password');mysql_select_db('test');

$result = mysql_query("SELECT * FROM users");

while ($row = mysql_fetch_array($result)) { echo $row['name'] . '<br>';}


Das scheint klassisch. Aber wenn die Tabelle users nicht existiert oder ein Syntaxfehler im SQL vorliegt, gibt mysql_query() keinen resource zurück, sondern false. Und dann erhält mysql_fetch_array() einen boolean statt eines resource – daher der Fehler.



Meistens liegt das Problem genau in der fehlgeschlagenen Ausführung der Abfrage. Aber lassen Sie uns alle möglichen Ursachen der Reihe nach durchgehen.



Ursache Nr. 1: Die SQL-Abfrage hat false zurückgegeben



Dies ist die häufigste Situation. mysql_query() gibt false zurück, wenn die Abfrage fehlschlägt. Zum Beispiel:

  • Die Tabelle existiert nicht
  • Falscher Feldname
  • Syntaxfehler im SQL
  • Probleme mit Zugriffsrechten


Wie überprüfen? Fügen Sie einfach eine Überprüfung nach der Abfrage hinzu:



$result = mysql_query("SELECT * FROM non_existent_table");

if (!$result) { die('Abfragefehler: ' . mysql_error());}

while ($row = mysql_fetch_array($result)) { // ...}


Das zeigt sofort, woran es liegt. mysql_error() gibt den Fehlertext aus, z. B.: "Table 'test.non_existent_table' doesn't exist".



Ursache Nr. 2: Verbindung zur Datenbank verloren



Manchmal bricht die Verbindung ab (z. B. wegen Timeout oder Neustart von MySQL). Dann gibt mysql_query() ebenfalls false zurück. Die Lösung – immer die Verbindung überprüfen:



$link = mysql_connect('localhost', 'user', 'password');if (!$link) {    die('Verbindung fehlgeschlagen: ' . mysql_error());}


Aber auch das ist kein Allheilmittel. Besser ist es, Funktionen zu verwenden, die automatisch neu verbinden können – z. B. MySQLi.



Ursache Nr. 3: Sie verwechseln die Funktionen mysql_* und mysqli_*



Ein weiterer häufiger Fall. Sie könnten versehentlich zwei verschiedene Bibliotheken mischen. Zum Beispiel mit mysqli_connect() verbinden, aber die Abfrage mit mysql_query() durchführen. Das funktioniert nicht: mysql_query() erwartet einen resource von mysql_connect(), nicht von mysqli_connect().



Hier ein Beispiel für die Verwechslung:



// Verbindung über MySQLi$link = mysqli_connect('localhost', 'user', 'password', 'test');

// Aber Abfrage über die alte mysql_*$result = mysql_query("SELECT * FROM users"); // Fehler!

while ($row = mysql_fetch_array($result)) { echo $row['name'];}


Die Lösung – bei einer Bibliothek bleiben. Li

Blogs

Buchempfehlungen