dedlfix: supplied argument is not a valid MySQL result resource?

Beitrag lesen

echo $begrüßung;

Die Lösung des Problems war dann aber im Grunde recht simpel: Bei der Abfrage von zwei Variablen musste ich diese in Anführungszeichen setzen, also:

$abfrage = "SELECT * FROM Archiv WHERE Monat = '$monat' AND Jahr = '$jahr'";
Das war alles, jetzt tut es. ;)

Ja, aber nur solange in den Variablen kein ' enthalten ist. Das ergibt dann die SQL-Injection-Lücke. Wann immer du Werte in einen bestimmten Kontext bringst, musst du sie dem Kontext gemäß behandeln. Für MySQL-Statements gibt es mysql_real_escape_string(). Und mit sprintf() lässt sich das auch lesbar gestalten:

$abfrage = sprintf("SELECT * FROM Archiv WHERE Monat = '%s' AND Jahr = '%s'",
    mysql_real_escape_string($monat), mysql_real_escape_string($jahr));

Außerdem gibt es noch ein PHP-Feature names Magic Quotes, dass genau diese Aufgabe erfüllen soll, aber auch unerwünschte Nebenwirkungen hat. Falls sie aktiviert sind, solltest du nun die Magic Quotes deaktivieren.

echo "$verabschiedung $name";