André S.: Problem beim selecten mit mysql

Hallo.

Folgender Befehl müsste eigentlich den kompletten, zutreffenden Datenbankinhalt auslesen und der der Variable $data[..] zuweisen, nichwahr?

$res = mysql_query("SELECT * FROM news_link WHERE news_id=$news_id", $db);
$data = mysql_fetch_array($res, MYSQL_ASSOC);  ?>

So gesehen funktioniert das auch, aber immer der erste zutreffende Datensatz wird nicht ausgelesen. Beispiel:

Ich lasse 2 Einträge eintragen, die ausgelesen werden soll, wenn $news_id=16 ist. Dabei wird der zutreffende Datensatz mit der niedrigsten ID nicht beachtet. Es erscheint also nur der zweite.

Weiß jemand rat?

Danke!

bye. andre

  1. Hallo.

    Folgender Befehl müsste eigentlich den kompletten, zutreffenden Datenbankinhalt auslesen und der der Variable $data[..] zuweisen, nichwahr?

    nein. Mysql_fetch_array gibt nur den in $res vorliegenden Datensatz aus. Es liegt aber immer nur ein Datensatz in der vor, du kannst alle Datrensätze nur in einer Schleife abfragen, siehe dazu die Beispiel in der Dokumentation zu mysql_fetch_array(): http://www.php3.de/manual/de/function.mysql-fetch-array.php

    Grüße
    Andreas

    1. jaja das weiss ich...

      Meine Schleife sieht so aus:
      <? while($data = mysql_fetch_array($res, MYSQL_ASSOC))
      echo $data['toptext']?>

      Nur das Prob is, dass eben der erste zutreffende Beitrag nicht ausgelesen wird.

      Hallo.

      Folgender Befehl müsste eigentlich den kompletten, zutreffenden Datenbankinhalt auslesen und der der Variable $data[..] zuweisen, nichwahr?
      nein. Mysql_fetch_array gibt nur den in $res vorliegenden Datensatz aus. Es liegt aber immer nur ein Datensatz in der vor, du kannst alle Datrensätze nur in einer Schleife abfragen, siehe dazu die Beispiel in der Dokumentation zu mysql_fetch_array(): http://www.php3.de/manual/de/function.mysql-fetch-array.php

      Grüße
      Andreas

      1. Hi!

        Nur das Prob is, dass eben der erste zutreffende Beitrag nicht ausgelesen wird.

        OK. Welche Eigenschaften hat die Spalte news_id? Kann es sein das diese einen unique Index hat, z.B. Primary? Dann wird das Problem beim Schreiben liegen, Du kannst nicht 2 gleiche Werte in einer unique Spalte haben. Wie schreibst Du in die Datenbank? Mit PHPMyAamin? Hast Du das mal kontrolliert ob auch tatsächlich 2 Datensätze vorhanden sind? Und wenn Du selbst mit PHP schreibst, läßt Du nur mysql_error() ausgeben?

        Viele Grüße
        Andreas

        PS: Bitte zitiere nur das worauf Du Dich beziehst!

        1. Hi!

          Wie schreibst Du in die Datenbank? Mit PHPMyAamin? Hast Du das mal
          kontrolliert ob auch tatsächlich 2 Datensätze vorhanden sind?

          Also ich habe sowohl einmal mit phpMyAdmin, als auch mit einem Script die Daten eintragen lassen. Angezeigt werden die Einträge allesamt, sie sind also vorhanden.

          OK. Welche Eigenschaften hat die Spalte news_id?

          Die Spalte news_id ist int(255), mehr habe ich nicht angegeben.

          bye.

          1. Hallo,

            ich vermute eher, dass Deine Schleife in Wirklichkeit noch ganz anders aussieht, oder?

            Du hast uns nur einen Codeausschnitt geschickt, von Du MEINST, dass der Fehler darin steckt. Schick mal ein bisschen mehr.

            Liebe Grüße aus http://www.braunschweig.de

            Tom

            --
            Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
            1. Hi!

              Du hast uns nur einen Codeausschnitt geschickt, von Du MEINST, dass der Fehler darin steckt. Schick mal ein bisschen mehr.

              Nein, leider nicht. Die Schleife schaut so aus, wie ich sie angegeben habe. Sie soll lediglich eine Spalte auslesen, das ist schon korrekt. Am Ende folgte nur noch } und mysql_free_result($res).

              1. Hi!

                Du hast uns nur einen Codeausschnitt geschickt, von Du MEINST, dass der Fehler darin steckt. Schick mal ein bisschen mehr.

                Dasselbe vermute ich auch.

                Nein, leider nicht. Die Schleife schaut so aus, wie ich sie angegeben habe. Sie soll lediglich eine Spalte auslesen, das ist schon korrekt. Am Ende folgte nur noch } und mysql_free_result($res).

                Also dann mach ich das mal hier:

                $res = mysql_query("SELECT * FROM news_link WHERE news_id=$news_id", $db);
                $data = mysql_fetch_array($res, MYSQL_ASSOC);  ?>

                <? while($data = mysql_fetch_array($res, MYSQL_ASSOC))
                echo $data['toptext']?>
                <?
                }

                mysql_free_result($res);
                // übrigens unötig wenn Du nicht das php_modul und mysql_pconnect verwendest
                ?>

                Ist das ganau so? Wo wird das } am Ende eröffnet? Vieleicht liegt es daran?

                Gebe mal mysql_num_rows($res); aus, also

                $res = mysql_query("SELECT * FROM news_link WHERE news_id=$news_id", $db);
                $data = mysql_fetch_array($res, MYSQL_ASSOC);
                echo mysql_num_rows($res);

                Grüße
                Andreas

                1. $res = mysql_query("SELECT * FROM news_link WHERE news_id=$news_id", $db);
                  $data = mysql_fetch_array($res, MYSQL_ASSOC);  ?>

                  <? while($data = mysql_fetch_array($res, MYSQL_ASSOC))
                  echo $data['toptext']?>
                  <?
                  }

                  mysql_free_result($res);
                  ?>

                  Ist das ganau so? Wo wird das } am Ende eröffnet? Vieleicht liegt es daran?

                  Ja, so sieht es aus. Die } wird beim while am Ende eröffnet. Ich arbeite da immer mit solchen Klammern :)

                  Gebe mal mysql_num_rows($res); aus,

                  Dieser Befehl gibt 2 aus, also ist schonmal sicher, dass 2 Einträge gefunden werden... nur mit der Ausgabe klappts net :(

                  bye. andre

                  1. Hi!

                    $data = mysql_fetch_array($res, MYSQL_ASSOC);  ?>
                    <? while($data = mysql_fetch_array($res, MYSQL_ASSOC))

                    ARGGGGGGHHHHH! Sowas dummes ;-) Fällt Dir was auf?

                    Lass die obere Zeile weg und des geht ;-)

                    Grüße
                    Andreas

                    1. Hi!

                      $data = mysql_fetch_array($res, MYSQL_ASSOC);  ?>
                      <? while($data = mysql_fetch_array($res, MYSQL_ASSOC))

                      ARGGGGGGHHHHH! Sowas dummes ;-) Fällt Dir was auf?

                      Lass die obere Zeile weg und des geht ;-)

                      Hi!

                      Wassn scheiß - das is mir voll nicht aufgefallen... und ich bin hier fast am Verzweifeln *g*

                      Besten Dank ;)

                      bye. andte

                      1. Holla,

                        Wassn scheiß - das is mir voll nicht aufgefallen... und ich bin hier fast am Verzweifeln *g*

                        Na, dafür sind doch Freunde da, oder? Auch wenn wir hier nur virtuell präsent sind :))

                        Liebe Grüße aus http://www.braunschweig.de

                        Tom

                        --
                        Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
                2. Hallo Andreas,

                  gut kombiniert, Holmes!

                  Erlaube also, dass ich Dich in Zukunft Holmes nenne. :-))

                  [...]

                  mysql_free_result($res);
                  // übrigens unötig wenn Du nicht das php_modul und mysql_pconnect verwendest
                  ?>

                  Das sollte man sich aber bei umfangreicheren Statements trotzdem angewöhnen. Wenn nämlich in einem Script mehrere solcher Dinger stehen, hilft das enorm, den erforderlichen Speicherplatz auf dem Server im Griff zu behalten.

                  Liebe Grüße aus http://www.braunschweig.de

                  Tom

                  --
                  Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
                  1. Hallo!

                    gut kombiniert, Holmes!

                    Elementar, mein lieber Watson, elementar! Ich rate nie!

                    Erlaube also, dass ich Dich in Zukunft Holmes nenne. :-))

                    sehr gerne Watson!

                    Holmes