Ankündigung

Einklappen
Keine Ankündigung bisher.

array und object...

Einklappen

Neue Werbung 2019

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

  • array und object...

    so...
    nach einem ganzen tag arbeit und getsete und rumgemache and bähh
    frage ich jetzt einfach mal:

    was is der unterschied zwischen mysql_fetch_object() und mysql_fetch_array() ?

    bitte auch physisch gesehen - denn...

    das object liefert ein falösches resultset zurück - das array hingegen amcht gnau das was es soll (mit dem selben query).

  • #2
    @Sclot

    auf der seite wir es so solala beschrieben
    http://at2.php.net/manual/de/functio...tch-object.php

    wie ich es verstanden habe bekommt du ja beim mysql_fetch_object nur das gesamte objekt zurück und musst es nachher über die objekte ansprechen - wie es hier im beipiel gezeigt wird.

    aber was willst du mit dem mysql_fetch_object genau erreichen?

    Kommentar


    • #3
      ich will erreichen, das es funktioniert

      mein vorazubi hat hier son paar script gebastelt die das verwenden... und die funktionieren alle nicht wirklich... wenn ich das aber nach mysql_fetch_array() umschreibe, dann tun sie das was sie sollen.

      Kommentar


      • #4
        ja sicher: ein array wird aber auch anderst behandelt als ein object

        das objekt wir über den namen angesprochen und das array über die dimensionen (hoffe habs richtig geschrieben)

        könntest du mal ein beispiel posten?

        gruss
        pascal

        Kommentar


        • #5
          das weiss ich ja alles...

          ich will den physischen unterschied wissen.. speicherverbrauch oder cache oder sowas...


          mein beispiel war:

          PHP-Code:
          <?php
          $mysql_shipment    
          mysql_query("SELECT * FROM test_shipment WHERE shipment_id = 'TEST-00085-03/2004-0000'");
          $my_shipment mysql_fetch_object($mysql_shipment);
          $my_shipment2 mysql_fetch_array($mysql_shipment);

          echo 
          print_a($my_shipment);
          echo 
          print_a($my_shipment2);

          ?>

          Kommentar


          • #6
            hab jetzt in zwei dokus nachgeschaut aber über den performance steht überhaupt nicht drinnen

            aber nach meinen wissen (bezieht sich eher auf andere programmiersprachen) ist ein object immer speicherlastiger als ein array, da dem array auch ein format vorgegeben werden kann.

            Kommentar


            • #7
              Was isn print_a()?
              Beide liefern korrekte Ergebnisse zurück, mysql_fetch_array allerdings numerische UND assoziative Keys.

              Dein 1. fetch verändert übrigens bereits den internen Zeiger von $mysql_shipment. D.h. die Ergebnisse sind nicht vergleichbar.

              Vergleichen musst du dann schon so:

              Code:
              $sql1 = "SELECT * FROM tabelle";
              $res1 = mysql_query($sql1);
              $res2 = mysql_query($sql1); // ja nochmal $sql1
              $my1 = mysql_fetch_object($res1);
              $my2 = mysql_fetch_array($res2);
              print_r($my1);
              print_r($my2);
              Ich benutze übrigens mysql_fetch_assoc() weil ich nur die assoziativen Keys (Spaltennamen) benötige und nicht noch die numerischen Indexe (Spalte 1 => "0", Spalte 2 => "1", ..). Warum mehr holen als benötigt?

              Kommentar


              • #8
                ok.. das mit dem internen zeiger musst du kir nochmal erklären...


                ich versuch jetzt mal mein problem zu erklären, was ich bestimmt nicht schaffen werde...


                also.. ich mache in einer belibigen php datei ca. 6 updates auf eine mysql tabelle in ein feld.
                zwischen jedem update schreibe ich den vorherigen wert mit
                getrennt in ein anderes feld (historie).

                ok.. nun sind die 6 updates fertig.

                nun rufe ich von einer anderen php datei die daten ab.
                und ratet mal was da im mysql_fetch_objekt() drin steht?

                jup.. genau der inhalt der vor den 6 updates in der tabelle satnd.
                obwohl im phpmyadmin das richtige steht...
                ich hab den ganzen tag heute gebraucht um das zu kapieren...

                auf jedenfall hab ich herausgefunden das mysql_fetch_aray() den datensazu korrekt, wie er im phpmyadmin angezeigt wird (mit den 6 updates) anzeigt.
                mysql_fetch_object() hingegen nicht.

                ich hatte erst gedacht das wär vielleicht ein cache problem...
                erst den tabellencache gefluscht..
                dann den query cache gefluscht...
                dann aus verzwiflung noch das mysql aus gemacht und wieder angemacht...
                ich stand schon kurz davor den ganzen server neu zu starten...

                dann hab ich das aus purer neugier mit dem mysql_fetch_array() versucht und damit ging es dann.

                so.. dafür möchte ich jetzt eine erklärung haben

                is übrigens php5.0.5 und mysql 4.0.21

                Kommentar


                • #9
                  Zitat von Sclot
                  ok.. das mit dem internen zeiger musst du kir nochmal erklären...
                  du machst per mysql_query ein SELECT und rufst darauf dann ein mysql_fetch_object auf. Dann hast du den 1. Datensatz der SELECT-Abfrage. Der "interne Zeiger" springt dann zum nächsten Datensatz. D.h. wenn du jetzt nochmal eine mysql_fetch_* Funktion aufrufst, holt er dir den 2. Datensatz (und nicht den 1.) usw.

                  d.h.
                  PHP-Code:
                  <?php
                  $res 
                  mysql_query("SELECT * FROM tabelle");
                  $datensatz1 mysql_fetch_assoc($res);
                  $datensatz2 mysql_fetch_object($res);
                  $datensatz3 mysql_fetch_array($res);
                  ?>
                  Ist ja logisch. Aber ich denke das wusstest du, hab mich wohl nur unklar ausgedrückt.


                  Zu deinem Problem: mysql_fetch_object() funktioniert 100% so wie mysql_fetch_array() oder mysql_fetch_assoc(). Die zurückgegebene Struktur ist eben nur anders. Und du musst beachten, dass eben der interne Zeiger eins weiter springt.

                  Zeig uns dochmal den entsprechenden Code. Ich bin mir sicher, da ist ein Logikfehler drin.

                  Kommentar


                  • #10
                    ok, danke...
                    hat sich erledigt...
                    ich hab heute nochmal geschaut und dann festgestellt, das ich wirklich 2 datensätze drin hab die da benutz werden... obwohl es eigendlich nur einen datensatz geben sollte...

                    naja.. auf jedenfall hab ich jetzt erstmal wieder etwas durchblick
                    mal schauen wo der andere fehler liegt, das da 2 datensätze drin sind.. mmh...

                    Kommentar

                    Lädt...
                    X