[MySQL] mysql_fetch_assoc() oder "Sonstiger Fehlerauslöser"
Zum Teil ist der Code aus einem (gutem) Buch und z.T. selbstgebastelt.
Diese mysql_fetch_assoc() sammelt die Inhalte der Tabelle Reihenweise ein.
$row = mysql_fetch_assoc () ist angeblich richtig, da mysql_fetch_assoc den Wert TRUE zurück gibt und die Schleife so oft wiederholt wie der Wert eben TRUE ist. Dabei wird immerwieder (wie es bei while und anderen Schleifen so ist normalerweise) der Array $row mit neuen Werten zugeballert.
Soweit so gut.
Das Problem ist folgende Fehlermeldung:
Ich kann damit nicht viel Anfangen, diese angegebene Zeile ist:
Die Tabelle und die "Untertabelle" gibt es, die Inhalte die rausgesucht werden sollen auch. Es gibt momentan nur einen Inhalt (= 1 Reihe).
Aber daran wird es wohl nicht liegen denke ich.
Was darf ich tun damit das ganze klappt?
Dennis
--
«Wir können alles schaffen, wir brauchen nur genug dressierte Affen» - infinite monkey theorem
1. Wenn du den Fehler "supplied argument is not a valid MySQL result resource" hast, pack eine Zeile nach dem mysql_query ein echo mysql_error(); rein, damit dir der Fehler in deiner MySQL-Abfrage angezeigt wird.
2. Der Query müsste lauten "SELECT * FROM `dvd_listing` WHERE `ownerid` = '1'" AFAIK...
1. Wenn du den Fehler "supplied argument is not a valid MySQL result resource" hast, pack eine Zeile nach dem mysql_query ein echo mysql_error(); rein, damit dir der Fehler in deiner MySQL-Abfrage angezeigt wird.
2. Der Query müsste lauten "SELECT * FROM `dvd_listing` WHERE `ownerid` = '1'" AFAIK...
[EDIT]
Hehe
...
Geht nun.
Neue Frage: echo mysql_error();
Kann man das nicht irgendwie als Global_mysql einstellen? Das alle MYSQL Meldungen ausgegeben werden wie bei der PHP Globalen - "gib alles aus" Fehlermeldungen?
Dennis
--
«Wir können alles schaffen, wir brauchen nur genug dressierte Affen» - infinite monkey theorem
Neues Problem:
Ich habe eine "Anmeldung" in der Datei "eingabe.php". Dort gebe ich den Nick ein (Dennis) und dann werde ich zu "ausgabe.php" gepostet. Dort soll der Nickname in der Tabelle `dvd_listing_user` (unter`nickname`) gesucht werden und seine ID in eine Variable gespeichert werden.
Klappt Blöderweise nicht ganz so toll wie es gehen sollte.
Habe jetzt auch auf die schnelle keinen Code (bzw. Syntax) dafür gefunden. Aber wie ich Euch kenne, wartet ihr, geil wie Dingsi auf seinen 19er TFT, auf so einen (für Euch leicht) verdienten Posting und erklärt mir was ich machen darf.
Dennis
--
«Wir können alles schaffen, wir brauchen nur genug dressierte Affen» - infinite monkey theorem
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in Capachefriends\xampp\htdocs\dvd_listin g\index.php on line 24
bedeutet, das mysql_fetch_assoc() Fehlgeschlagen ist, weil die übergabeparameter nicht korrekt sind. Die übergabeparameter kommen ja von der SQL abfrage. Also meistens ist dann dort ein Fehler passiert. Musst also deinen SQL String anschauen.
Jetzt wie die vorhergehenden Posts schon gesagt haben, kanns du dir mit mysql_error() den SQL Fehler ausgeben lassen. Du kannst aber auch den SQL String mit einem echo ausgeben, und ihn dann z.B. mit PHPMyAdmin oder hald über die SQL-Konsole ausführen und dann siehst du die Fehlermeldung auch.
mysql_result() brauchst du nicht unbedingt. Das macht mysql_fetch_assoc ja auch. Einfach nicht vergessen das die Funktion ein Associatives Array zurückliefert. Siehe Doku
Also, laut php.net ist mysql_result nicht sonderlich schnell, und wenn mysql_fetch_assoc schneller ist (bzw. die verwandten versionen mysql_fetch_array usw.), dann kann ich auch mysql_fetch_assoc nehmen.
Zur Frage:
Der Code oben funktioniert 1a, meine Frage:
Muss ich $nickname noch als Array definieren bevor ich es zum Array mache (durch mysql_fetch_assoc?
In dem Script wäre das jetzt etwas blöd, da es ja als Array gespeichert wird und danach als Array definieren wäre humbug.
Muss ich $nickname als Array definieren für "sauberes" PHP? Oder ist das egal?
Dennis
PS: Warum sind die Codetags durch [*TT*] gekenzeichnet? Was soll den TT heißen?
--
«Wir können alles schaffen, wir brauchen nur genug dressierte Affen» - infinite monkey theorem
Muss ich $nickname noch als Array definieren bevor ich es zum Array mache (durch mysql_fetch_assoc?
...
geh ich mal davon aus, dass du folgendes meinst:
statt
folgendes:
Zunächst einmal musst du $nickname nicht extra als Array definieren. Die Verwendung von mysql_fetch_assoc sorgt ja bereits dafür, dass $nickname als Array behandelt wird.
Wenn du $nickname vorher schon als Array definierst, hast du nach dem Aufruf von mysql_fetch_assoc ein Array im Array. Während also $nickname = mysql_fetch_assoc ausgeben würde: Array([ID] => xy [blub] =>) usw. würdest du bei $nickname[] = mysql_fetch_assoc Array([0] => Array([ID] => xy [blub] =>)) erhalten. Beim durchlaufen des Arrays für die weitere Verarbeitung würde das einen Unterschied machen in Bezug auf den Zugriff auf die einzelnen Array-Elemente.
Was du natürlich machen könntest: vor $nickname[] = mysql_fetch_assoc(...) folgendes zusetzen: Allerding hab ich noch nirgendwo gesehen, dass das so gemacht wird. Zumal ja wie gesagt durch die Funktion mysql_fetch_assoc $nickname als Array definiert wird.
Also, laut php.net ist mysql_result nicht sonderlich schnell, und wenn mysql_fetch_assoc schneller ist (bzw. die verwandten versionen mysql_fetch_array usw.), dann kann ich auch mysql_fetch_assoc nehmen.
...
Jain. Wenn du nur einen einzelnen Wert auslesen willst, ist mysql_result() AFAIK die Schnellste oder zumindest kongeniale Lösung.
Sobald du aber gleich mehrere Felder abgreifen willst, oder sogar mehrere Datensätze ausgeben, sind die arrayerzeugenden Funktionen die schnelleren Lösungen:
mysql_fetch_assoc(), mysql_fetch_row(), mysql_fetch_array()
Ist also Fallabhängig.
mysql_fetch_row ist von den Dreien die schnellste Variante, nur ist die Funktion fehleranfälliger als die anderen beiden, weil hier die Felder nicht mit Namen im Arraykey angesteuert werden, sondern über selbstinkrementierende Arraykeys. Ändert sich die Reihenfolge der Felder in der Datenbank (du fügst ein Feld irgendwo zwischen ein) verschieben sich auch die Werte hinter den Arraykeys entsprechend...
Zugegeben: Klingt kompliziert.
Zitat von dennis_meckel
Zur Frage:...
...
Nope, brauchst du nicht. Ich hab auch noch in keinem Script, das mir je untergekommen ist, gesehen dass das gemacht wurde.
PHP ist extrem flexibel wenn es um Variablendeklaration geht. PHP erkennt selbst ob eine Variable einen String, einen integer, einen Bool'schen Integer ist, oder ob es sich bei einer Variable um einen Array handelt.
Nope, brauchst du nicht. Ich hab auch noch in keinem Script, das mir je untergekommen ist, gesehen dass das gemacht wurde.
PHP ist extrem flexibel wenn es um Variablendeklaration geht. PHP erkennt selbst ob eine Variable einen String, einen integer, einen Bool'schen Integer ist, oder ob es sich bei einer Variable um einen Array handelt.
...
Das stimmt schon, nur hatte ich schon oft das Problem, dass eine Variable, die zuerst ein Array war, und die ich danace als String verwenden wollte, bei echo nur den ersten Buchstaben des String ausgab. Ich würde grundsätzlich Variablen nur einmal verwenden, bzw. sie lieber noch einmal expliziet umwandeln - damit bist du auf der sicheren Seite
Das stimmt schon, nur hatte ich schon oft das Problem, dass eine Variable, die zuerst ein Array war, und die ich danace als String verwenden wollte, bei echo nur den ersten Buchstaben des String ausgab. Ich würde grundsätzlich Variablen nur einmal verwenden, bzw. sie lieber noch einmal expliziet umwandeln - damit bist du auf der sicheren Seite
...
Explizit, wie würde das dann aussehen?
Dennis
Edit: @Chocy: Hm, war meine Vermutung richtig.
--
«Wir können alles schaffen, wir brauchen nur genug dressierte Affen» - infinite monkey theorem
Hmm, habs gerade mal ausprobiert, scheint aber nicht zu klappen, wenn mans expliziet will
Ansonsten geht es einfach nach einfach diesem Schema:
Bei mir trat dieses Problem eigentlich nur auf, wenn der Array in einer Schleife verarbeitet wurde. Wenn mir sowas nochmal passiert, werde ich den Code mal posten
Das stimmt schon, nur hatte ich schon oft das Problem, dass eine Variable, die zuerst ein Array war, und die ich danace als String verwenden wollte, bei echo nur den ersten Buchstaben des String ausgab. Ich würde grundsätzlich Variablen nur einmal verwenden, bzw. sie lieber noch einmal expliziet umwandeln - damit bist du auf der sicheren Seite
...
Du musst zwei Sachen unterscheiden: Arrays, die du selber anlegst und solche, die durch Funktionen wie zum Beispiel mysql_fetch_assoc erzeugt werden.
Bei letzeren ist eine explizite Vorgabe,das es sich um ein Array handelt nicht notwendig. Bei allen anderen Variablen, die ein Array darstellen sollen, musst du das natürlich angeben.
In dem Fall musst du dein Array immer mit $array[] = inhalt oder eben mit $array = array(inhalt) definieren.
$array = "irgendwas"; wird PHP nie als Array sondern immer als String interpretieren, so das bei einem Schleifendurchlauf immer der String "irgendwas" in seine einzelnen Buchstaben zerlegt wird.