joebo: array zeiger durchwandern nach mysql-query()?

hallo,

ich habe folgendes problem!
ich ahbe ien klasse die ein methode hat welche eine datenbank abfrage beinhaltet.

function getDb($user_id, $box)
{
    $anfrage= "SELECT * FROM Tabelle";
    $db_id= mysql_query($anfrage);
    $return_values= mysql_fetch_array($db_id);
    return $return_values;
}

wie kann ich nun den rückgabewert $return_values mit einer schleife abarbeiten. while macht eine endlosschleife und durchwandert nur den ersten zeiger. und foreach macht auch nichts!
wie funktioniert das?

joebo

  1. Moin ,

    function getDb($user_id, $box)
    {
        $anfrage= "SELECT * FROM Tabelle";
        $db_id= mysql_query($anfrage);
        $return_values= mysql_fetch_array($db_id);
        return $return_values;
    }

    mit MSSQL sollte be My genauso oder zumindest ähnlich sein:

    while ( $result0=mssql_fetch_array($return_values))

    Gruß
    Mike

    --
    Murphy: "Wenn etwas schiefgehen kann, dann wird es auch schiefgehen."
    1. function getDb($user_id, $box)
      {
          $anfrage= "SELECT * FROM Tabelle";
          $db_id= mysql_query($anfrage);
          $return_values= mysql_fetch_array($db_id);
          return $return_values;
      }
      mit MSSQL sollte be My genauso oder zumindest ähnlich sein:
      while ( $result0=mssql_fetch_array($return_values))

      danke für die antwort jedoch wirst du sehn das ich bereits die DB kennung in ein array gepackt habe!
      $return_values= mysql_fetch_array($db_id);

  2. hi,

    ich ahbe ien klasse die ein methode hat welche eine datenbank abfrage beinhaltet.

    diese funktionalität endet hier:

    function getDb($user_id, $box)
    {
        $anfrage= "SELECT * FROM Tabelle";
        $db_id= mysql_query($anfrage);

    (ggf. noch fehlerhandlinh implementieren.)

    das, was danach kommt

    $return_values= mysql_fetch_array($db_id);
        return $return_values;

    gehört schon gar nicht mehr zur datenbank-abfrage, sondern ist bereits ein teil der auswertung der ergebnismenge - gehört als in eine klasse mit der von dir oben gegebenen funtkionsbeschreibung schon gar nicht mehr hinein.

    wie kann ich nun den rückgabewert $return_values mit einer schleife abarbeiten. while macht eine endlosschleife und durchwandert nur den ersten zeiger. und foreach macht auch nichts!

    warum nimmst du nicht einfach die ressource-id, die dir mysql_query() zurückliefert, als rückgabewert?

    gruß,
    wahsaga

    --
    http://wazgnuks.net/ - back from the dead
    1. ich habe bereits veruscht id eressource_ID als rückgabewert zu verwenden, jedoch ist jene nicht mehr vorhanden!
      bricht die DB connection nach dem beenden der methode ab?

      joe

      1. hi,

        ich habe bereits veruscht id eressource_ID als rückgabewert zu verwenden, jedoch ist jene nicht mehr vorhanden!

        hast du den returnwert auch beim aufrufen der funktion in empfang genommen, oder lässt du die rückgabe im datennirwana versickern? (beliebter anfänger-fehler)

        bricht die DB connection nach dem beenden der methode ab?

        nein, nicht das ich wüsste.

        gruß,
        wahsaga

        --
        http://wazgnuks.net/ - back from the dead
        1. hast du den returnwert auch beim aufrufen der funktion in empfang genommen, oder lässt du die rückgabe im datennirwana versickern? (beliebter anfänger-fehler)

          jaja hab ich natürlich
          $output= $datenbank->getdb();
          und da setzt es an! was mach ich nun mit
          $output?

          foreach ($output as $blabla)
          geht nicht!
          while ($output)
          geht nicht weil alle auf dem ersten zeiger hängen bleiben!

          1. jaja hab ich natürlich
            $output= $datenbank->getdb();
            und da setzt es an! was mach ich nun mit
            $output?

            foreach ($output as $blabla)
            geht nicht!
            while ($output)
            geht nicht weil alle auf dem ersten zeiger hängen bleiben!

            Wie sieht denn das Array aus ( print_r($output) )?

            --
            dies ist keine signatur
            1. geht nicht weil alle auf dem ersten zeiger hängen bleiben!

              Wie sieht denn das Array aus ( print_r($output) )?

              auch mit print_r bekomm ich ja immer nur die werte des ersten zeigers! und des problem ist, dass ich alle durchwandern möchte!!!

              1. geht nicht weil alle auf dem ersten zeiger hängen bleiben!

                Wie sieht denn das Array aus ( print_r($output) )?

                auch mit print_r bekomm ich ja immer nur die werte des ersten zeigers! und des problem ist, dass ich alle durchwandern möchte!!!

                Du bekommst in deiner Funktion "getDb" auch nur den ersten Datensatz zurück. Änder die Funktion mal in folgendes:

                function getDb($user_id, $box)
                {
                    $anfrage= "SELECT * FROM Tabelle";
                    $db_id= mysql_query($anfrage);
                    $return_values = array ();

                while ( $_result = mysql_fetch_array($db_id) )
                  array_push ( $return_values, $_result );

                return $return_values;
                }

                Nun müßte print_r ($output) alle Daten ausgeben und ein foreach ($output) geht den ganzen Array durch.

                --
                dies ist keine signatur
            2. Hello,

              Wie sieht denn das Array aus ( print_r($output) )?

              Wird da übrhaupt etwas angezeigt? $output ist ja ein Ressource-Handle und nicht die Adresse eines Arrays. Für Ressource-Handles benötigt man natürlich die dazu passenden Handle-Funktionen.

              Wenn man Dateien öffnet mit $fh = fopen(...) dann kan man ja auch nicht mit print_r($fh) die datei ausgeben. Man muss sie erst mit der zum handle passenden Funktion auslesen.

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

              Tom

              --
              [ Computer-Camp für PHP-Anwender in den Sommerferien. Programmieren,
                Sport, Fun, Fete. Teilnehmermindestalter Gruppe 1: 14 Jahre
                Mindestalter Gruppe 2+3 18 Jahre, Info bei mir ]
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              1. Wie sieht denn das Array aus ( print_r($output) )?

                Wird da übrhaupt etwas angezeigt? $output ist ja ein Ressource-Handle und nicht die Adresse eines Arrays. Für Ressource-Handles benötigt man natürlich die dazu passenden Handle-Funktionen.

                $output enthält ja den Rückgabewert von mysql_fetch_array(). Und das liefert einen Array (oder false) zurück.

                --
                dies ist keine signatur
                1. Hello,

                  Wie sieht denn das Array aus ( print_r($output) )?

                  Wird da übrhaupt etwas angezeigt? $output ist ja ein Ressource-Handle und nicht die Adresse eines Arrays. Für Ressource-Handles benötigt man natürlich die dazu passenden Handle-Funktionen.
                  $output enthält ja den Rückgabewert von mysql_fetch_array(). Und das liefert einen Array (oder false) zurück.

                  Ich hatte das in den Kontext von wahsagas Tipp gesetzt:

                  function getDb($user_id, $box)
                  {
                      $anfrage = "SELECT * FROM Tabelle";
                      $res = mysql_query($anfrage);
                      return $res;
                  }

                  Und bitte nochmal die drei Zeilen von mir dahinter:

                  $_liste = array()
                  while($_liste[] = mysql_fetch_assoc($output));
                  mysql_free_result($output);

                  Und dann klappts auch.

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

                  Tom

                  --
                  [ Computer-Camp für PHP-Anwender in den Sommerferien. Programmieren,
                    Sport, Fun, Fete. Teilnehmermindestalter Gruppe 1: 14 Jahre
                    Mindestalter Gruppe 2+3 18 Jahre, Info bei mir ]
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          2. Hello,

            hast du den returnwert auch beim aufrufen der funktion in empfang genommen, oder lässt du die rückgabe im datennirwana versickern? (beliebter anfänger-fehler)

            jaja hab ich natürlich
            $output= $datenbank->getdb();
            und da setzt es an! was mach ich nun mit
            $output?

            foreach ($output as $blabla)
            geht nicht!
            while ($output)
            geht nicht weil alle auf dem ersten zeiger hängen bleiben!

            $_liste = array()
            while($_liste[] = mysql_fetch_assoc($output));
            mysql_free_result($output);

            Das gesamte Resultset wir so ab der Position des Resultsetzeigers bis zum Ende in das (zweidimensionale) Array $_liste übertragen.
            Das Resultset kann danach freigegeben werden.

            In jedem Element von $_liste steht nun also ein Datensatz, der wiederum aus den abgefragten Feldern besteht.

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

            Tom

            --
            [ Computer-Camp für PHP-Anwender in den Sommerferien. Programmieren,
              Sport, Fun, Fete. Teilnehmermindestalter Gruppe 1: 14 Jahre
              Mindestalter Gruppe 2+3 18 Jahre, Info bei mir ]
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
  3. wie kann ich nun den rückgabewert $return_values mit einer schleife abarbeiten. while macht eine endlosschleife und durchwandert nur den ersten zeiger. und foreach macht auch nichts!
    wie funktioniert das?

    Hallo!

    Wenn ich dich richtig verstehe, dann willst du doch nur das Array $return_values durcharbeiten.

    Erstmal kannst du mit mysql_fetch_array($id,MYSQL_ASSOC) oder entsprechend mysql_fetch_array($id,MYSQL_NUM) angeben, ob du ein assoziatives oder ein numerischer Array willst.

    (vgl. http://www.selfphp.info/funktionsreferenz/mysql_funktionen/mysql_fetch_array.php)

    Im Fall, dass du ein assoziatives Array willst, nehme ich immer folgendes Vorgehen:

    $keys = array_keys($return_values);
      for ($i=0; $i<count($keys); $i++) {
        tu_etwas_mit($return_values[$keys[$i]]);
      }

    war das die richtige Antwort?

    1. ob es die richtige antwort ist weis sich noch nicht.
       aber auf alle fälle hilft es mir sehr weiter!!! danke joe