Ergebnis 1 bis 15 von 15

Thema: [MySQL] mysql_fetch_assoc() oder "Sonstiger Fehlerauslöser"

  1. #1

    [MySQL] mysql_fetch_assoc() oder "Sonstiger Fehlerauslöser"

    PHP-Code:
    <?php
    mysql_connect
    ('localhost','root','');                                        // hoster, user, password
    mysql_select_db('webproject');

    $sql "SELECT * FROM `dvd_listing` WHERE `ownerid` = `1`";
    $result mysql_query($sql);

    while (
    $row mysql_fetch_assoc($result))
     {
      echo 
    "$row[ownerid] $row[title] $row[lent] $row[remark]<br>\n";
     }

    mysql_close()
    ?>
    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:
    Code:
    Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\apachefriends\xampp\htdocs\dvd_listing\index.php on line 24
    Ich kann damit nicht viel Anfangen, diese angegebene Zeile ist:
    PHP-Code:
    while ($row mysql_fetch_assoc($result)) 
    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

  2. #2
    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

    Geändert von dead_orc (29.08.2005 um 14:06 Uhr)

  3. #3
    Wie ist der Output der Funktion mysql_error()?

    Edit:
    Argh, orc war schneller.

  4. #4
    Zitat Zitat von dead_orc
    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

  5. #5
    Nein, aber du könntest dir eine eigene Funktion schreiben, damit du automatisch Fehlermeldungen ausgegeben bekommst.

    Wenn du willst, kannste auch meine db_query haben oO

  6. #6
    Neues Problem:
    PHP-Code:
    $nickname2 "SELECT `id` FROM `dvd_listing_user` WHERE `nickname` = '{$nickname}'";
    $nickname2_echo mysql_query($nickname2);
    echo 
    $nickname// klappt nicht
    echo $nickname2_echo//klappt nicht 
    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

  7. #7
    PHP-Code:
    $nickname_get mysql_query("SELECT id FROM dvd_listing_user WHERE nickname = '$nickname'");
    $nickname2 mysql_result($nickname_get,0);
    echo 
    $nickname2// müsste klappen 
    Du hast also eine Resultauswertende Funktion wie mysql_result() vergessen.

    Weshalb $nickname bei dir keinen Wert enthält, kann ich so nicht nachvollziehen, da ich nicht sehen kann wie und wo $nickname definiert wurde.

  8. #8
    Also der Fehler

    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

    Hoffe ich konnte weiterhelfen...

    MFG
    redX

    Geändert von redX (29.08.2005 um 23:22 Uhr)

  9. #9

    Diesmal kein Problem sondern eine btw. Frage ;)

    PHP-Code:
    $nickname mysql_query("SELECT id FROM dvd_listing_user WHERE nickname = '$nickname'");
    $nickname mysql_fetch_assoc($nickname);
    echo 
    $nickname['id']; 
    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?
    PHP-Code:
    $nickname[] // oder so ähnlich 
    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?

  10. #10
    Nach deiner Frage zu urteilen
    Zitat Zitat
    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
    PHP-Code:
    $nickname mysql_fetch_assoc(...) 
    folgendes:
    PHP-Code:
    $nickname[] = mysql_fetch_assoc(...) 
    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:
    PHP-Code:
    $nickname = array(); 
    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.

    Geändert von NiKrYss (01.09.2005 um 11:21 Uhr)

  11. #11
    Zitat Zitat von dennis_meckel
    PHP-Code:
    $nickname mysql_query("SELECT id FROM dvd_listing_user WHERE nickname = '$nickname'");
    $nickname mysql_fetch_assoc($nickname);
    echo 
    $nickname['id']; 
    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 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.

    Geändert von Chocwise (01.09.2005 um 14:38 Uhr)

  12. #12
    Zitat Zitat
    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

  13. #13
    Zitat Zitat von Manni_the_Dark
    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.

  14. #14
    Hmm, habs gerade mal ausprobiert, scheint aber nicht zu klappen, wenn mans expliziet will
    Ansonsten geht es einfach nach einfach diesem Schema:
    PHP-Code:
    <?php
    $vari 
    = array("key" => "val"=> 56=> "xd");
    $vari "String";
    echo 
    $vari;
    ?>
    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

  15. #15
    Zitat Zitat von Manni_the_Dark
    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.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •