Sven Rautenberg: mysql... Abfrage ob ein Wert *irgendwo* in der DB vorkommt

Beitrag lesen

Moin!

$abfrage = "SELECT * FROM xyz WHERE test == '$test'";

WHERE test = '$test' <- keine doppelten Gleichheitszeichen für SQL verwenden!

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/www/web9/html/nrl/test.php on line 17

Das ist ein Folgefehler. Da du den Erfolg der Datenbankabfrage nicht überprüft hast, stößt irgendeine Funktion, die auf das (nicht vorhandene) Datenbankergebnis zugreifen will, dann auf den Fehler und erzeugt diese Fehlermeldung.

Merken: Wenn diese Meldung kommt, ist nicht unbedingt die gemeldete Zeile falsch, sondern meist die vorhergehende Datenbankabfrage. Sie sollte dir signalisieren: Irgendwas mit der Datenbankabfrage stimmt nicht - sofern du keine Tippfehler gemacht hast. Deshalb ist es wichtig, den Erfolg einer Abfrage immer mit PHP-Mitteln zu prüfen.

Alle Datenbankfunktionen, die unbemerkt fehlschlagen können, geben im Fehlerfall in der Regel "false" zurück. Du kannst also immer mit

if ($ergebnis = mysql_query($abfrage))
{
  // Hier das tun, wenn die Abfrage erfolgreich war
}
else
{
  // Hier das tun, wenn die Abfrage einen Fehler ergab.
  // Zum Beispiel:
  echo "DB-Query ergab diesen Fehler: ".mysql_error()."<br>Die SQL-Abfrage lautete: ".$abfrage."<br>";
  // Es ist eine gute Idee, sich die SQL-Abfrage mit ausgeben zu lassen, insbesondere, wenn Variablen eingebaut werden - die führen gerne zu unvorhersehbaren Komplikationen.
}

Denn du hast es hier mit zwei unabhängigen Systemen zu tun, bei denen Fehler im einen System nicht zwingend Fehler im anderen System bedeuten müssen. Dein PHP-Skript kann programmlogisch perfekt sein - wenn deine SQL-Abfrage falsch ist, passiert trotzdem nicht das, was du wolltest.

- Sven Rautenberg

--
"Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)