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

  • Sclot
    hat ein Thema erstellt array und object....

    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).

  • Sclot
    antwortet
    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...

    Einen Kommentar schreiben:


  • Zergling-new
    antwortet
    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.

    Einen Kommentar schreiben:


  • Sclot
    antwortet
    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

    Einen Kommentar schreiben:


  • Zergling-new
    antwortet
    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?

    Einen Kommentar schreiben:


  • bendigo
    antwortet
    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.

    Einen Kommentar schreiben:


  • Sclot
    antwortet
    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);

    ?>

    Einen Kommentar schreiben:


  • bendigo
    antwortet
    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

    Einen Kommentar schreiben:


  • Sclot
    antwortet
    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.

    Einen Kommentar schreiben:


  • bendigo
    antwortet
    @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?

    Einen Kommentar schreiben:

Lädt...
X