» Startseite
» Newsübersicht
» Kontakt
» Impressum

» Forum
» Gästebuch

» Einführung PHP
» Einführung MySQL
   » Anfang
   » Tabellen füllen
   » Verbin. aufbauen
   » Daten ausgeben
   » Weitere Abfragen
   » Daten hinzufügen
   » Daten ändern
   » Daten löschen
   » Anzahl d. Zeilen
   » Verbin. beenden
   » MySQL-Fehler


PHP-Einfach.de

Counterdienst:
Digicount.de
Unser werbefreier Counter- und Statistikdienst

MySQL-Error Handling

Es kommt immer wieder vor, dass eine Abfrage einfach nicht funktioniert. Das Problem dann zu finden ist gar nicht so leicht, aber nur, wenn man ein paar Tricks nicht kennt.

Oft bekommt man solch eine Fehlermeldung:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /test.php on line 5

Wollen wir uns mal anschauen, wie die Fehlermeldung zustande gekommen ist:
<?php
//Verbindungsaufbau zur Datenbank
$abfrage = "SELECT name, password FROM tabelle";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis)
   {
   //Mache etwas
   }
?>
Also irgendwie meckert PHP herrum, dass etwas mit mysql_fetch_object nicht in Ordnung ist.
Und zwar steht in der Fehlermeldung, dass das Argument (die Variable), keine gültige MySQL-Resource ist. Aber was bedeutet das jetzt?
Und zwar gibt mysql_query(); sofern alles funktioniert hat, eine MySQL-Resource zurück, wenn nicht, ein false.
Eine MySQL-Resource ist in etwa der Speicherort wo das Ergebnis gespeichert ist.

Also bemängelt mysql_fetch_object(); das $ergebnis keine gültige Resource ist, also muss $ergebnis false sein. Daraus folgern wir, dass irgendetwas nicht mit der Abfrage stimmt.

Um das herrauszufinden, gibt es die Funktion: mysql_error();. Diese Funktion gibt den letzten MySQL Fehler aus, wir können den Script ja z.B. so anpassen:
<?php
//Verbindungsaufbau zur Datenbank
$abfrage = "SELECT name, password FROM tabelle";
$ergebnis = mysql_query($abfrage)
    OR die("Error: $abfrage <br>".mysql_error());
while($row = mysql_fetch_object($ergebnis)
   {
   //Mache etwas
   }
?>
Also dieses OR die() bewirkt, dass falls mysql_query() fehlerhaft ist, etwas ausgegeben wird.
Und zwar wird zuerst die Abfrage, und danach die Rückgabe von mysql_error() ausgegeben.
Das könnte z.B. so aussehen:
Error: SELECT name, password FROM tabelle
Unknown column 'password' in 'field list'
Naja diese Fehlermeldung ist ziehmlich eindeutig, und zwar ist das Feld password nicht vorhanden. Evt. heißt es ja passwort oder pw?.


Eine weitere Fehlerquelle ist oft soetwas:
<?php
//Verbindungsaufbau zur Datenbank
$abfrage = "SELECT betreff, text, show
            FROM news WHERE id = '1'";
$ergebnis = mysql_query($abfrage)
    OR die("Error: $abfrage <br>".mysql_error());
//....
?>
Dies führt zu einem Fehler, und zwar:
Error: SELECT betreff, text, show FROM news WHERE id = '1' You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM news WHERE id = '1'' at line 1

Auch wenn die 3 Spalten wirklich vorhanden sind, führt uns dies nicht weiter.
Denn show (oder SHOW) ist ein von MySQL reserviertes Wort/Befehl. Man kann diesen Namen so nicht als Spaltennamen benutzen, genauso wenig wie z.B. delete, update o.ä. hier versagen würde.
Entweder benutzt man also nicht reservierte Wörter, oder man muss den Spaltennamen show in backticks setzen:
<?php
$abfrage = "SELECT betreff, text, `show`
            FROM news WHERE id = '1'";
//...
?>
Diese backticks (`) sind keine einfachen Anführungszeichen!
Mit diesen Umschließt man z.B. Spaltennamen, Tabellennamen und ähnliches.
Die Abfrage könnte dann auch so aussehen:
<?php
$abfrage = "SELECT `betreff`, `text`, `show`
            FROM `news` WHERE `id` = '1'";
//...
?>
Eine Liste mit reservierten Wörter findet ihr im MySQL-Handbuch.

Falls Ihr Hilfe braucht, dann besucht bitte unser Forum
Ihr könnt auch ohne Anmeldung Fragen stellen.



Autor Andavos

News

Forum

Newsletter


© PHP-Einfach.de 2003 - 2007