Ankündigung

Einklappen
Keine Ankündigung bisher.

PDO fetch vs fetchAll => geht vs geht nicht

Einklappen

Neue Werbung 2019

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

  • PDO fetch vs fetchAll => geht vs geht nicht

    Hallo,

    ich arbeite mich gerade in PDO ein und möchte hier eine Datenbankabfrage erstellen, welche mir als Ergebnis zum Beispiel alle Zeilen aus der Tabelle anzeigt. Gem. Recherche soll hierzu fetchAll eingesetzt werden, da fetch sich nur den Nächsten Datensatz holt.
    Zitat zu fetch:
    Hiermit besorgt man sich immer nur den nächstmöglichen Datensatz als Array
    Zitat zu fetchAll:
    ...sie alle Daten in einem Rutsch holt. Das Ergebnis wird dann als Array zurückgegeben
    Nun habe ich eine einfache Tabellenabfrage zum Test, bei der das Ergebnis mit fetch ausgegeben wird. Das funktioniert; also bekomme ich auch mehrere Datensätze als Array. Ersetze ich nun fetch durch fetchAll, findet er keine Treffer.

    Meine Frage ist nun, was ich für einen Befehl nehmen muss um die Abfrage richtig zu bestimmen bzw. warum es mit fetchAll nicht funktioniertt? fetch oder fetchAll

    Anbei der Code:
    PHP-Code:
        $sel="select id,vorname,name,ort from tabelle where sicht='1' order by name ASC";
        
    $daten=$con->query($sel);

        
    $habe=$daten->rowCount();

        if (
    $habe>0)
        {
                
    // while($row01=$daten->fetchAll(PDO::FETCH_ASSOC)) //funktioniert nicht
                
    while($row01=$daten->fetch(PDO::FETCH_ASSOC)) //funktioniert
                
    {
                  echo 
    $row01['id']." ".$row01['vorname']." ".$row01['name']." ".$row01['ort']."<br />";
                }
       } 
    Gruß
    Falke07

  • #2
    Wozu while? fetchAll liefert schon ein fertiges, zweidimensionales Array mit allen Einträgen - siehe Doku. Das ist ja genau der Unterschied zu fetch.
    [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

    Kommentar


    • #3
      Zitat von chorn Beitrag anzeigen
      Wozu while? fetchAll liefert schon ein fertiges, zweidimensionales Array mit allen Einträgen - siehe Doku. Das ist ja genau der Unterschied zu fetch.
      Immerhin beim ersten mal sollte fetchall Ergebnisse liefern, dh.
      Ersetze ich nun fetch durch fetchAll, findet er keine Treffer.
      ist falsch.
      https://php-de.github.io/#debugging

      PS: kennt jemand eine Alternative zu:
      https://angular.io/
      meldet bei mir js error..

      Kommentar


      • #4
        Hallo,

        ok,
        nun funktioniert es mit fetchAll.

        PHP-Code:
        if ($habe>0)
        {
               foreach(
        $daten->fetchAll(PDO::FETCH_ASSOC) as $row01)
               {
                     echo 
        $row01['id']." ".$row01['vorname']." ".$row01['name']." ".$row01['ort']."<br />";
                }


        Wenn ich das richtig verstanden habe:
        fetch kann ich z. B. mit while verwenden, da hier durch die Scheife Zeile für Zeile (je ein Ergebnis(array) pro Zeile) ausgegeben wird und fetchAll liefert das Gesamtergebnis in einer array, welches ich dann nur noch durch foreach entsprechend verwerten kann.


        Gruß
        Falke07

        Kommentar


        • #5
          Du solltest deine Variablen nicht so verwirrend benennen. Da kennt sich ja niemand aus.

          Und fetchAll() brauchst du hier gar nicht:
          PHP-Code:
          $result $db->query($sql);

          foreach (
          $result as $row) {
              
          // ...

          Kommentar


          • #6
            Siehe auch .. fertiges Beispiel: https://php-de.github.io/jumpto/pdo/#no-param

            Zitat von Falke07 Beitrag anzeigen
            Wenn ich das richtig verstanden habe:
            fetch kann ...
            und fetchAll liefert ...
            Steht doch alles in der Doku!? Bitte nächstes mal vorher zuerst lesen, dann fragen!

            PDOStatement::fetch — Fetches the next row from a result set
            http://php.net/manual/de/pdostatement.fetch.php

            PDOStatement::fetchAll — Returns an array containing all of the result set rows
            http://php.net/manual/de/pdostatement.fetchall.php
            The string "()()" is not palindrom but the String "())(" is.

            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
            PHP.de Wissenssammlung | Kein Support per PN

            Kommentar


            • #7
              Hallo,

              aber ist es nicht so, dass ich durch
              PHP-Code:
              $daten->fetchAll(PDO::FETCH_ASSOC
              meinem Ergebnis sage, dass die Ausgabe Alphanummerisch ist. Hier könnte ich ja auch, wenn es sich nur um Zahlen handelt
              PHP-Code:
              $daten->fetchAll(PDO::FETCH_NUM
              setzen.

              Oder bin ich hier komplett falsch abgebogen. (Sorry für die Fragen, aber ich lese mich gerade in PDO ein und versuche es aufgrund von Forumbeiträgen, Manuells und Google Suchergebnissen richtig zu machen.

              Gruß
              Falke07

              Kommentar


              • #8
                aber ist es nicht so ...
                Der Unterschied ist ein Datensatz oder alle Datensätze.

                ich lese mich gerade in PDO ein
                Schau dir mal die beiden vorweg an:

                https://php-de.github.io/jumpto/pdo/

                http://www.php-rocks.de/thema/49-ein...tatements.html

                Das sollt ein solider Überblick für den Einstieg sein. Dann kannst du ja noch herumspielen, Doku lesen etc etc..
                The string "()()" is not palindrom but the String "())(" is.

                Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                PHP.de Wissenssammlung | Kein Support per PN

                Kommentar


                • #9
                  Ja steht alles in der Doku, muss halt auch mal lesen.

                  Du solltest auch den Kontextwechsel beachten, sonst kannst du dir da böse Scripte einfangen.

                  htmlscpecialchars im PHP Handbuch.

                  Hier mal eine Liste was man sich so mit Javascript so alles ins Haus(auf dem Server) holen kann, manche davon haben auch schon bei grossen Unternehmen viel Schaden angerichtet.

                  Kommentar


                  • #10
                    FETCH_ASSOC und FETCH_NUM bestimmen unter welchem Index die Ergebnisse abgelegt werden.
                    Code:
                    SELECT 'A' as First, 'B' AS Last
                    Mit FETCH_ASSOC wäre das Ergebnis dann
                    Code:
                     array(2) {   ["First"] => string(1) "A"   ["Last"] => string(1) "B" }
                    Und mit FETCH_NUM
                    Code:
                     array(2) {   [0] => string(1) "A"   [1] => string(1) "B" }
                    FETCH_NUM nummeriert also einfach durch (vielleicht startet er auch bei 0 anstatt 1, keine Ahnung), entsprechend der Stelle in der die Spalte im Select steht. FETCH_ASSOC nimmt den Spaltennamen als Index.
                    [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
                    [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

                    Kommentar


                    • #11
                      Hallo VPh,

                      das ist eine Klasse Erklärung, nun hab ich auch das verstanden. Einfach, kurz und schmerzlos )

                      THx
                      Falke07

                      Kommentar

                      Lädt...
                      X