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

Beitrag lesen

echo $begrüßung;

Vielen Dank für eure Antworten, auch wenn ich nicht wirklich alles verstanden hab, Anfänger halt.

Dann frag doch bitte konkret nach. Es wird dir sicherlich jemand erklären, wie die Stelle gemeint war.

Nun habe ich ein Script, mit dem ich über href das Problemscript aufrufe mit folgendem Befehl:

echo "<a href='archiv.php?var1=" .$row->Monat. " &var2=" .$row->Jahr. "'>$row->Monat $row->Jahr</a>";

Das übergebene Script sieht folgendermaßen aus:

Übergebend? Nicht etwa übernehmend? Oder besser formuliert: das aufgerufene. Denn woher eine Anfrage kommt ist prinzipiell egal. Jede Requestabarbeitung steht für sich allein und hat keinen Bezug zu irgendwelchen anderen Requests.

$monat=$_GET["var1"];
$jahr=$_GET["var2"];

Oft gesehen, immer wieder unnötig. In $_GET['var1'] (übrigens: var1 ist ein nicht sehr aussagekräftiger Bezeichner) steht bereits der Wert, den du haben möchtest drin. Du kannst ihn gleich weiterverwenden, ohne ihn erst in eine andere Variable umzukopieren.

mysql_connect("localhost", "...","...") or die
("Keine Verbindung moeglich");

Ein Script zu töten ist meist eine unangemessene Methode, auf Fehler zu reagieren. Reagiere besser mit Fallunterscheidung darauf, und zeig dem Anwender eine für ihn nützliche Information an, wie er nun trotz des Fehlers weitermachen kann. Für die nicht zustandegekommene Datenbankverbindung kann er nichts, er braucht auch keine Detailinformationen für solche Fehler angezeigt zu bekommen. Du als Administrator solltest aber sehr wohl davon Kenntnis nehmen.

$abfrage = "SELECT * FROM PlatteMonat WHERE $monat = $row->Monat AND $jahr = $row->Jahr";

Diese Variablenerstellung unterschiedet sich doch deutlich von der aus dem OP:

$abfrage = "SELECT * FROM PlatteMonat WHERE Monat=$monat AND Jahr=$jahr";

Es bleibt die Frage bestehen: Wie lautet das Ergebnis dieser Anweisung? Konkret: Was steht nun in $abfrage?

Stell bitte außerdem beim Entwickeln von PHP-Anwendungen das error_reporting auf E_ALL, damit du Zugriffsversuche auf nicht vorhandene Variablen angezeigt bekommst.

$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))

Die hier fehlende Auswertung des Ergebnisses von mysql_query() führt bei Fehlern im SQL-Statement zu deiner ursprünglichen Fehlermeldung, denn das false des Fehlerfalls ist kein gültiges Argument für die Fetch-Funktion.

Folgenden Fehler konnte ich mir anzeigen lassen (der mir allerdings auch nicht wirklich weiterhilft):

Access denied for user '...'@'localhost' to database '..., Resource id #5' 1064: 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 'AND 2008 =' at line 1

Das sind zwei Fehler mit einer Kontrollausgabe einer Variablen dazwischen. Ein Fehler stammt von einem misslungenen Connect-Versuch, der andere von einem Fehler im SQL-Statement beim Ausführen. Syntax-Fehler sind immer vor der angeführten Stelle zu suchen.

echo "$verabschiedung $name";