Problem mit mysql_fetch_object :-/

Status
Nicht offen für weitere Antworten.

ParadiseCity

Erfahrenes Mitglied
Hi!
Ich weiß nicht so recht ob ich im richtigen Forum bin, aber egal...
Ich habe mit PHP eine HP gemacht (mit DB und so) hat auch lokal alles perfekt funktioniert. Nur hab ich sie vor kurzem auf den Webserver meines Providers deponiert, um sie öffentlich zugänglich zu machen, und seither bekomme ich, wenn ich zB die Mitglieder aus der DB auslese folgende Meldung:
"Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource "
der Code dazu sieht folgendermaßen aus:
PHP:
$result = mysql_query("Select * from Mitlgieder where ID = $ID")

while($helpvar = mysql_fetch_object($result))
{
echo "$helpvar->Name<br>"
// und so weiter....
}
Ach ja, die Variable $ID bekomm ich von einer vorhergehenden Seite (die Übergabe funktioniert auch, der richtige Wert wird übergeben;) )
Und wenn ich das SQL-Statement direkt in der DB ausführe bekomm ich auch was ich bekommen soll.
Kann das evtl. an einer Einstellung am Webserver liegen :(
Ich weiß nicht mehr wirklich weiter.....
 
Und das da Mitlgieder steht (g und l vertauscht), das ist bestimmt nur ein Schreibfehler hier im Forum, oder?

Mach mal Dein Select-Statement in eine extra Variable und lass Dir die dann ausgeben.

PHP:
$sql = "Select * from Mitglieder where ID = $ID";
echo($sql);
$result = mysql_query($sql);

Ansonsten, was es noch sein könnte...von welchem Typ ist die ID-Spalte in der Datenbank? Versuchs vielleicht auch mal so:

PHP:
$sql = "Select * from Mitglieder where ID = '".$ID."'";

Oder die Datenbankverbindung....steht die?
 
Wie oft sprechen wir in diesem Forum von Selfdebugging und dem Abfangen von möglichen MySQL Fehlermeldungen? Ich denke mindestens 2-3 mal die Woche.

Also
1) Das das Semikolon in deiner ersten Scriptzeile fehlt, wird wohl nur im Forum hier so sein, sonst hättest du ja einen Parse-Error bekommen.

2) Spalten und Tabellennamen in MySQL Querries gehören in Backticks gesetzt, da du sonst bei der Verwendung von MySQL Reserved-Words als Spalten oder Tabellennamen schonmal gut und gerne in Probleme kommen kannst.

3) Variablen gehören nicht in Strings eingebunden, sondern schön getrennt, also wenn, dann
PHP:
$result = mysql_query("SELECT * FROM `Mitglieder` WHERE `ID` = ".$ID);

4) Zurück zum Abfangen der MySQL Fehler. Du kannst und solltest jede Funktion, die mit einem mysql_ beginnt um den Anhang or die(mysql_error()) ergänzen, dann tappst du niemals im dunkeln, weil er dir immer sofort ausgibt, wo es hakt.
Also im Endeffekt
PHP:
$result = mysql_query("SELECT * FROM `Mitglieder` WHERE `ID` = ".$ID) or die(mysql_error());
 
Und das da Mitlgieder steht (g und l vertauscht), das ist bestimmt nur ein Schreibfehler hier im Forum, oder?
Jep, war ein Tippfehler hier im Forum sorry...

Ansonsten, was es noch sein könnte...von welchem Typ ist die ID-Spalte in der Datenbank?
In der DB ist die ID Spalte vom Typ integer ;)

3) Variablen gehören nicht in Strings eingebunden, sondern schön getrennt
Ist das wirklich ein relevanter Punkt oder nur so "Das ist halt so weils alle anderen auch so machen"?

Ich kann die Änderungen leider erst am Abend ausprobieren, aber danke schon mal...
 
Original geschrieben von ParadiseCity
Ist das wirklich ein relevanter Punkt oder nur so "Das ist halt so weils alle anderen auch so machen"?
Es ist von meinen 4 angeführten Punkte wahrscheinlich der mit dem geringsten Gewicht zur Beseitigung deines Problems, aber was falsch ist, kann bei der Behebung eines Problems relevant sein.
Ergo: Das ist nicht so, weils halt alle anderen auch so machen, sondern alle anderen machen das auch so, weil es so richtig ist.
 
Ich hab jetzt mal das mit den Backticks ausprobiert. Wenn ich
PHP:
$result = mysql_query("Select * from 'bewerb' where 'ID' = ".$ID);
schreibe, dann bringt er mir den selben Fehler.
Wenn ich die Backticks weglasse, funktioniert die Abfrage wieder....
Bin jetzt etwas verwirrt :(
 
Zuletzt bearbeitet:
Da gehören die auch nicht hin (zumindest brauchst Du sie da nicht wirlich). Wenn dann brauchst Du sie bei dem Wert, also bei $ID (und nicht beim Spaltennamen). Aber auch da eigentlich nur, wenns varchar oder text oder sowas ist.

Hast Du Dir denn auch alle anderen Punkte mal zu Herzen genommen?

Achso, ja, heute abend. Ja, dann viel Erfolg heute Abend!
 
Zuletzt bearbeitet:
Original geschrieben von ParadiseCity
Ich hab jetzt mal das mit den Backticks ausprobiert. Wenn ich
PHP:
$result = mysql_query("Select * from 'bewerb' where 'ID' = ".$ID);

schreibe, dann bringt er mir den selben Fehler.
Wenn ich die Backticks weglasse, funktioniert die Abfrage wieder....
Bin jetzt etwas verwirrt :(
MERKE: Das -> ' ist kein Backtick. Das hier -> ` ist ein Backtick. Aber außerdem ist VIEL VIEL entscheidender, dass du das verdammte teil um das or die(.. ergänzt. Ich dachte, das wäre aus meinem Posting hervorgegangen, dass darauf das Hauptaugenmerk liegen muss.

Da gehören die auch nicht hin (zumindest brauchst Du sie da nicht wirlich). Wenn dann brauchst Du sie bei dem Wert, also bei $ID (und nicht beim Spaltennamen). Aber auch da eigentlich nur, wenns varchar oder text oder sowas ist.

Hast Du Dir denn auch alle anderen Punkte mal zu Herzen genommen?
Siehe meine umfassenden Erklärungen in diesem Post und in meinem Ausgangspost. Bei der Angabe von Argumenten zu WHERE ist zu beachten, dass numerische Dinge wie eine ID nicht zwingend in Singlequotes( das hier -> ' ) müssen, Strings aber unbedingt.
 
OK SORRY :-) hab nicht genau hingesehen, dass das ->` Backticks sind und nicht ->'
Mit den richtigen Backticks funktionierts jetzt auch bei mir lokal :-)

Da gehören die auch nicht hin (zumindest brauchst Du sie da nicht wirlich). Wenn dann brauchst Du sie bei dem Wert, also bei $ID (und nicht beim Spaltennamen).
Das hab ich mir eben bis ich Tim´s Post gelesen habe, auch gedacht. ;)
 
OK, ich komm mir jetzt saublöd vor, aber es war kein Problem mit mysql_fetch_object(); auch keines von mysql;
Sondern der Wert der ID wird doch nicht übergeben :-( :-( :-( :-( :-(
Ich bin davon ausgegangen, weil wenn ich auf der Vorseite in die Statusleiste geschaut habe, da der vollständige Link drinnenstand (INKL. ID) wenn ich jedoch auf der folgenden Seite diese ID abfrage: NICHTS - blank
Was kann es denn da noch haben?
PHP:
// Link von der 1. Seite:
<a href=detailbewerb.php?ID=25>......</a>

PHP:
// die 2. Seite (detailbewerb.php)
$sql = "Select * from `bewerb` where `ID` = " . $ID;
echo $sql;
$result = mysql_query($sql) or die (mysql_error());
Und wie ich mir das SQL-Statement ausgegeben haben lasse ist es mir aufgefallen, dass die ID nicht übergeben wird....:(
 
Status
Nicht offen für weitere Antworten.
Zurück