Wer des Häufigeren mit Skripten, Programmieren oder Datenbankanwendungen basierend auf MySQL zu tun hat, dem ist sicher auch schon mindestens einmal die nervige Fehlermeldung “mysql_num_rows(): supplied argument is not a valid MySQL result resource in” oder ähnliche Meldungen wie “mysql_xxx_xxxx(): supplied argument is not a valid MySQL result resource in” begegnet. Auch wenn diese Meldung noch so nervig ist, sie zeigt uns doch an dass etwas nicht stimmt und bietet dabei schon erste Hinweise darauf wo denn das Problem genauer liegt, welches zu dieser Meldung geführt hat.
Gründe gibt es genug die zu dieser Fehlermeldung führen können und ein Skript daran hindern korrekt ausgeführt zu werden. Der einfachste und häufigste Grund ist wohl, dass ein erwarteter Wert der zur Laufzeit aus der Datenbank gelesen werden soll nicht den erwarteten Syntax aufweist oder aber eine entsprechende Zeile in der Datenbank erst gar nicht vorhanden ist. Hier hat man meistens etwas vergessen oder war nicht ganz bei der Sache. Anders sieht es aber in den folgenden Fällen aus.
Wenn das Problem auftritt wenn ein Skript schon längere Zeit in Betrieb war und man selber keine Änderungen durchgeführt hat, dann ist es sehr wahrscheinlich dass die MySQL Serverversion erneuert wurde oder ein entsprechendes Update durchgeführt wurde. Verantwortungsvolle Hoster machen diese Änderungen nicht ohne Absprache mit dem Kunden, es kommt aber leider immer wieder vor dass ahnungslose Webmaster von eben auf jetzt mit Skriptfehlern zu kämpfen haben. Sehr oft ist es so, dass bei einer neueren MySQL Serverversion auch viele Änderungen enthalten sind die nicht abwärtskompatibel sind, Befehle und, oder Syntax geändert, oder gar ganz herausgenommen werden.
Natürlich muss nicht immer ein verantwortungsloser Hoster Schuld an der Misere sein, auch ist nicht immer ein Update der MySQL Serverversion Auslöser für dieses Problem. Es kann durchaus auch mal passieren dass man ein Update einer Software durchgeführt hat und dann auch diese Problem auftritt. Auf jeden Fall ist es erst einmal so, dass im Falle einer solchen Fehlermeldung viele Webmaster vor unlösbaren Problemen stehen, selbst Webmaster mit Grundkenntnissen in PHP und MySQL bekommen dann nicht immer sofort das Problem in den Griff oder eine entsprechende Lösung geboten.
Wer dann am Ende mit einer Software arbeitet die nicht supported wird oder wo der Support am Ende richtig Geld kostet, der hat dann schnell schlechte Karten.
Die erzeugte Fehlermeldung “mysql_xxxx_xxxx(): supplied argument is not a valid MySQL result resource in” hilft dann insofern schon einmal ein wenig weiter indem sie uns mitteilt welches Skript, und auch an welcher Stelle im Skript, diesen Fehler ausgelöst hat. Eine erste Lösung bietet sich hier schon an, und diese kann auch von weniger erfahrenen Webmastern angewendet werden.
Der erste Schritt wäre nun das entsprechende Skript zu lokalisieren, auch hier ist uns die eingeblendete Fehlermeldung bereits hilfreich, indem sie uns auch gleich den kompletten Pfad zum fehlerhaften Skript anzeigt. Nachdem das Skript lokalisiert wurde, öffnet man dieses in einem Editor und sucht sich die entsprechende Zeile in welcher der Fehler zu finden sein soll, wer einen Editor mit Zeilenangaben benutzt braucht nicht lange zu suchen sondern kann gleich an die in der Fehlermeldung angegebene Zeile im Skript springen.
Und jetzt beginnt die einfachste und schnellste Möglichkeit dem Fehler auf die Schliche zu kommen, einfach mal die entsprechende Zeile markieren und vollständig kopieren, anschließen dann diese Zeile mal in Google eingeben und eine Suche starten. Mit etwas Glück und bei einer bekannten Software hat man dann schon die ersten Lösungsansätze in den Suchergebnissen gefunden, bei der Suche sollte man bei den ersten Versuchen die entsprechende Zeile in Anführungszeichen setzen. Wenn jetzt noch nichts gefunden wurde kann mann noch einen Teil der Fehlermeldung zu der Zeile aus dem Skript hinzufügen, diese aber außerhalb der Anführungszeichen als extra Suchbegriff.
Auch kann es behilflich sein wenn man spezielle Variablen innerhalb der fehlerhaften Zeile weglässt, weil man dann eventuell Ergebnisse erhält die nicht unbedingt Software spezifisch sind.
Wenn das Alles nichts geholfen hat dann gibt es noch eine weitere hilfreiche Möglichkeit, Eine die vieleicht sogar sofort mit in Betracht gezogen werden sollte. Folgende Zeile hilft uns dabei weiter:
print mysql_error();
Diese Zeile liefert am Bildschirm zusätzliche Angaben darüber welcher Wert, welche Variable oder welcher Syntax denn genau zu der Fehlermeldung geführt hat. Einfach diese Zeile unter die Stelle im Skript setzen, an der die Anfrage an die Datenbank verarbeitet wird. Danach das Skript noch einmal im Browser aufrufen und et voila hat man in den allermeisten Fällen zusätzliche und nützliche Hinweise die bei der Lösung Suche behilflich sein können.
Wem die zusätzlichen Angaben jetzt auch noch keine Hilfe waren der sollte jetzt hingehen und mit den zusätzlich gewonnen Informationen eine neue Suche bei Google starten. Meisten steht dort irgendwo im Satz, der zusätzlich zu den schon bekannten Texten der Fehlermeldung ausgegeben wird, ein “…..near xxxx”. Diese Stelle ist wichtig und sollte inklusive dem “….near xxxx” und den nachfolgenden Informationen markiert und kopiert werden. Das Ganze gibt man dann wieder in Google ein und startet erneut eine Suche, aber aufgepasst hier ist es sehr oft so dass bestimmte Werte die aus der Datenbank gelesen werden mit in der Fehlermeldung enthalten sind, diese sollte man bei der Google Suche am besten weglassen und nur den Rest ohne diese Werte benutzen. Auch hier helfen wieder die vorhin schon erwähnten Anführungszeichen bei der Suche und auch hier ist es wieder Ratsam verschiedene Teile der Fehlermeldung im Suchfeld bei Google mit einzubeziehen.
Ich persönlich gehe exakt so vor wie ich es hier beschrieben habe wenn ich mal selber nicht sofort weiter komme, und ich kann versichern dass ich in 100% aller Fälle hiermit Erfolg hatte. Nun wünsche ich jedem der einmal mit diesem Problem konfrontiert wird dass er anhand meiner Schilderung dieses in den Griff bekommt und sich an einem wieder lauffähigen Skript erfreuen kann.
Viel Erfolg bei der Fehlersuche wünscht,
Erol Ilkan aka DerAdler (08-02-2010 | 4:10 Uhr)


