Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL-Abfrage in ein Array geben

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MySQL-Abfrage in ein Array geben

    Hey Leutz

    Hab so ne MySQL Abfrage in PHP. Anstatt sowas hier:

    Code:
    $result = mysql_query("select * from bla where blubb='mubb'")
    while($row = mysql_fetch_array($result){
    
    $user_name = $row['username']
    ...
    
    }
    will ich den Output in einem Array drinne haben, das ich später mit

    Code:
    foreach($sqlarray as $datensatz){
    
    $user_name = $datensatz['username']
    ...
    }
    beliebig oft verwenden kann, ohne jedes mal nen neuen Query machen zu müssen. Hoffe ihr versteht was ich meine.

    Dieses $result ding ist irgendwie kein Array oder ich bin einfach nur zu blöd inner Rübe.

  • #2
    Zitat von Meister_im_Kleister
    will ich den Output in einem Array drinne haben
    Dann schreibe ihn doch einfach in ein Array rein. Wo liegt Dein Problem?

    http://de2.php.net/manual/en/language.types.array.php

    Kommentar


    • #3
      Mein Problem... also ich weis schon wie man's in ein Array bringen könnte. So z.bleistift:

      Code:
      while($myrow = mysql_fetch_array($result)){
      	extract($myrow, EXTR_PREFIX_ALL, 'bs'); //alle Felder in Variablen umwandeln und ein "bs_" voranstellen
      
      		$rechnungen_array[] = array(
      			"rnr" => $bs_azr_rnr,
      			"id" => $bs_id,
      			"sendungsfreigabe" => $bs_sendungsfreigabe
      		);
      }
      Aber so muss ich von hand sämtliche Feldnamen erstmal in eine while Schleife eingeben. Dachte eventuell gibt's dafür eine elegantere Lösung.

      Im PHP Manual habe ich unter den MySQL-Funktionen nichts passendes gefunden

      Kommentar


      • #4
        Also was ich meine ist: In $result ist kein Array das ich als solches in PHP verarbeiten kann. Mit mysql_fetch_array($result) wird nur EIN Datensatz als Array umgewandelt.

        Was gefragt ist: Alle Datensätze ganz easy in ein mehrdimensionales Array und feddich...

        Kommentar


        • #5
          $myrow ist doch schon ein Feld.
          Warum dieses also erst mit extract() auseiander reissen, nur um es dann wieder zusammenzubasteln?
          rechnungen_array[] = $myrow;

          Kommentar


          • #6
            Zitat von Meister_im_Kleister
            Mein Problem... also ich weis schon wie man's in ein Array bringen könnte.
            Schlicht und einfach so:
            PHP-Code:
            $myArray = array();
            while(
            $myArray[] = mysql_fetch_assoc($result)) ; 
            Das stapelt alle selektierten Datensätze (assoziatives Array) in ein numerisches Array.

            //alle Felder in Variablen umwandeln und ein "bs_" voranstellen
            Sowas erledigt man mit dem Zauberwort AS in der SQL Abfrage.

            SELECT spalte1 AS neuSpalte1, spalte2 AS neuSpalte2 ...

            btw: brauchst Du wirklich *alle* Felder

            Kommentar


            • #7
              danke das hat mir geholfen

              soweit läuft's wie von ignatz beschrieben.

              Aber aus irgend einem Grund habe ich immer noch einen leeren Datensatz hinten im Array, der als letztes ausgegeben wird (nichts drin).

              In der DB nur 6 Datensätze. mein Array $myArray spuckt mir mit foreach($myArray as $datensatz) aber 7 Dinger aus...

              Code:
              $myArray = array();
              while($myArray[] = mysql_fetch_array($result));
              
              foreach($myArray as $datensatz){
              echo "test
              ";
              }

              Kommentar


              • #8
                Output von $myArray nach dem es in der while schleife erstellt wurde:

                Code:
                Array
                (
                    [0] => Array
                        (
                            [0] => 3
                            [id] => 3
                            [1] => 4
                            [p] => 4
                            [2] => 5
                            [bwp] => 5
                        )
                
                    [1] => Array
                        (
                            [0] => 6
                            [id] => 6
                            [1] => 4
                            [p] => 4
                            [2] => 0
                            [bwp] => 0
                        )
                
                    [2] => Array
                        (
                            [0] => 1
                            [id] => 1
                            [1] => 5
                            [p] => 5
                            [2] => 2
                            [bwp] => 2
                        )
                
                    [3] => Array
                        (
                            [0] => 2
                            [id] => 2
                            [1] => 5
                            [p] => 5
                            [2] => 2
                            [bwp] => 2
                        )
                
                    [4] => Array
                        (
                            [0] => 4
                            [id] => 4
                            [1] => 6
                            [p] => 6
                            [2] => 12
                            [bwp] => 12
                        )
                
                    [5] => Array
                        (
                            [0] => 5
                            [id] => 5
                            [1] => 7
                            [p] => 7
                            [2] => 0
                            [bwp] => 0
                        )
                
                    [6] => 
                )
                man beachte das letzte Array im Array (6)... what's that? MySQL spuckt mir da definitiv keinen leeren datensatz aus. und wenn ich das so modifiziere:

                Code:
                $myArray = array(); 
                while($myArray[] = mysql_fetch_array($result)){
                
                echo "test
                ";
                }
                dann erscheint auch nur 6 mal "test". Also definitiv nur 6 Datensätze, aber trotzdem 7 Array's? verstehe das nicht

                Kommentar


                • #9
                  es scheint als würde er nach abschluss dieser while schleife noch so ein sinnloses leeres Array rein schmuggeln.

                  habe auch mal print_r($myArray) in diese while schleife eingebunden. 6 mal kommt immer nur ein array mehr hinzu. so wie es sein soll.

                  aber NACH dieser while schleife habe ich dieses siebte anhängsel drinne

                  dazwischen steht kein anderer code, dieses array wird auch nirgends angetastet!! wie kann das sein? die logik will ich mal verstehen :wink:

                  Kommentar


                  • #10
                    Zitat von Meister_im_Kleister
                    dazwischen steht kein anderer code, dieses array wird auch nirgends angetastet!! wie kann das sein? die logik will ich mal verstehen :wink:
                    Überleg dir doch einfach mal was du da überhaupt machst

                    Code:
                    $myArray = array();
                    //Weise $myArray[] den Inhalt aus mysql_fetch_array zu 
                    //überprüfe dann ob mysql_fetch_array ein Ergebnis odr false geliefert hat
                    //falls Ergebnis wiederhole das ganze
                    while($myArray[] = mysql_fetch_array($result));
                    
                    //im Gegensatz zu:
                    //Weise den Inhalt aus mysql_fetch_array $tmp zu und prüfe ob mysql_fetch_array ein Ergebnis oder false lieft. Fall Ergebnis: Reihe $tmp ins Array ein.
                    while($tmp = mysql_fetch_array($result))
                    $myArray[]=$tmp;
                    Na schnackelts?

                    btw.: Es gibt einen "edit"-Knopf um deine Beiträge editieren zu können - so musst du nicht immer neue Posts erstellen...

                    Kommentar


                    • #11
                      äh... ok ich versuch's gerade nachzuvollziehen.

                      in der while-schleife wird das array gefüllt.

                      Code:
                      $myArray = array(); 
                      while($myArray[] = mysql_fetch_array($result));
                      der Code in Klammern würde nur 6 mal ausgeführt werden, denn es gibt nur 6 datensätze, und die bedingung heisst "so lange mysql_fetch_array ein ergebnis liefert, mach dies und das". 6 mal klappt das auch. beim siebten mal liefert mysql_fetch_array aber nix zurück, aber da dort ja blöderweise steht

                      Code:
                      $myArray[] = mysql_fetch_array($result)
                      wird das Array zum schluss noch einmal mit einem "nix" gefüllt. Jetzt klingelt's bei mir aber wie in nem Glockenturm. Verdammte hacke. Wie verhindere ich diesen schmarrn? Muss ich dieses leere dingens da zum schluss wieder raus kicken, oder kann man das noch besser machen, so das wirklich nur Datensätze ins Array gehen?

                      Glaube ich habe ne Gehirnblockade, wahrscheinlich brennt mir die Lösung schon auf der Zunge nur ich merk davon nix. Brainf***-Alarm!

                      Kommentar


                      • #12
                        Für alle potentiellen Mitleser die mich für total bekloppt halten... check this:

                        Code:
                        while($irgendeinArray = mysql_fetch_array($result)){
                        	$myArray[] = $irgendeinArray;
                        }
                        SO musses sein. nix mit schon gleich inner while-schleife-Bedingung das Array füllen, sondern in der Schleife, also den geschweiften Klammern da...

                        jetzt funktionockelt's auch, wie es funktionockeln soll! WOCHENENDE GERETTET! DANKE

                        Kommentar


                        • #13
                          mysql_fetch_array() liefert nicht nichts zurück, wenn es keine weiteren Datensätze mehr gibt. Es liefert false.
                          Und das wird bei while($myArray[]=mysql....) zugewiesen.
                          Bei while($irgendeinArray = mysql... auch, aber eben nur $irgendeinArray und nicht $myArray.

                          while($myArray[] = mysql_fetch_array($result)); ist also ...zu smart
                          Aber wenn Du es so verwenden willst, kannst Du den letzten Wert mittels array_pop nach der Schleife entfernen.

                          http://de2.php.net/array_pop

                          Kommentar


                          • #14
                            Zitat von Meister_im_Kleister
                            Aber aus irgend einem Grund habe ich immer noch einen leeren Datensatz hinten im Array, der als letztes ausgegeben wird (nichts drin).
                            EDIT:
                            siehe die nächsten Beiträge.

                            Kommentar


                            • #15
                              Zitat von Bruchpilot
                              mysql_fetch_array() liefert nicht nichts zurück, wenn es keine weiteren Datensätze mehr gibt. Es liefert false.
                              Richtig.
                              Und das wird bei while($myArray[]=mysql....) zugewiesen.
                              Falsch.

                              while($myArray[] = mysql_fetch_array($result)); ist also ...zu smart
                              Deshalb schrieb ich ja auch:
                              while($myArray[] = mysql_fetch_assoc($result));

                              Kommentar

                              Lädt...
                              X