[MySQL]: falsche ausgabe



  • Hui, als ich mit mysql und php kram angefangen hab gabs mysql_fetch_assoc() noch gar nicht - Gut zu wissen dass es das gibt 😉

    Es sei noch gesagt das man "SELECT * FROM bla..." möglichst vermeiden sollte, desto weniger Felder man selektiert, umso weniger muss übertragen werden und desto schneller geht das ganze 😃



  • mysql_fetch_array mit MYSQL_ASSOC ist doch eigentlich nichts anderes als mysql_fetch_assoc, oder?

    und wie ist von der Geschwindigkeit her ein list(var1,var1,var2) = mysql_fetch_row(res)imVergleichzumysql_fetch_assoc(res) im Vergleich zu mysql\_fetch\_assoc(res) - auch in Betracht eines darauffolgenden Zugriffs auf die Elemente des Arrays.

    @geeky: "SELECT * FROM ..." kann auch (je nach verwendeter mysql_fetch_* Funktion) dazu führen, dass du nach hinzufügen weiterer Spalten den ganzen Code ändern muss, weil sich ja dann dein Result-Set ändert 😉


  • Mod

    flenders schrieb:

    und wie ist von der Geschwindigkeit her

    *_row und *_object sind die schnellsten
    *_assoc ist an dritter stelle und *_array ist das langsamste.
    Es macht aber oft sinn *_assoc zu verwenden, da sollte man sich nicht abschrecken lassen.

    Aber *_array ist deswegen langsam, weil es alle Daten _zweimal_ beinhaltet, einmal mit numerischen ideces, und einmal als assoc Array.



  • @shade
    Was ist dann der Vorteil von *_assoc ?



  • Das die numerischen Indices fehlen, und nur die assoziativen angegeben sind, also man grad die hälfte 🙂



  • Das bekommt man aber doch auch mit mysql_fetch_array, wenn man als 2. Parameter MYSQL_ASSOC angibt :p



  • Aja verstehe

    *_row => Arrays nur mit numerischen Indezes
    *_assoc => Nur mit assoziativen Indezes
    *_array => wird von den anderen Funktionen mit den entsprechenden Parametern aufgerufen 😃



  • Genau - und damit hier mal Klarheit herrscht, noch einen Auszug aus der PHP-Doku zu mysql_fetch_array:

    Zu betonen ist, dass der Gebrauch von mysql_fetch_array() nicht signifikant langsamer ist als mysql_fetch_row(), obwohl die Funktion einen sichtlichen Mehrwert bietet.

    Das optionale zweite Argument Ergebnistyp in mysql_fetch_array() ist eine Konstante und kann die folgenden Werte annehmen: MYSQL_ASSOC, MYSQL_NUM und MYSQL_BOTH. Diese Eigenschaft steht seit PHP 3.0.7 zur Verfügung. MYSQL_BOTH ist der Standard für diesen Paramater.

    Verwenden Sie MYSQL_BOTH, erhalten Sie ein Array mit assoziativen und numerischen Indizes. Bei MYSQL_ASSOC erhalten Sie nur asoziative Indizes (genau wie bei mysql_fetch_assoc()). Verwenden Sie MYSQL_NUM erhalten Sie nur numerische Indizes (genau wie bei mysql_fetch_row()).



  • lol, ich hab gerade gemerkt das ich auch fast immer mit both
    laufe. Habe mir irgendwann mal ne DB-Klasse geschrieben die alles
    alleine macht und mir dann nen Array zurückgibt (um nicht auf mysql
    festgenagelt zu sein).
    Aber da war auch noch mysql_fetch_array ohne assoc-param drin obwohl ich
    die nums dank foreach nie benutze 😉



  • Nur zur Erklärung. Die ABfrage der Datenbank liefert dir eine Errgebnismenge.
    Eine Ergebnismenge sind alle Zeilen, welche der Server zurückgibt.
    Da hinter php auch nur die API von MySQL arbeitet befindet sich diese Ergebnismenge in der Struktur MYSQL_RES.

    Jetzt musst du mit Fetch noch diese Ergebnismenge durchgehen um die Zeilen daraus zu bekommen.



  • richtig.

    Aber wenn ich jetzt mysql_fetch_array benutze habe ich die Indices ja einmal numerisch und einmal assoziativ. Sind die Werte wirklich kopiert oder sind es nur Verweise? Bei php sollte das kopieren ja schneller sein habe ich mal gelesen..

    mfg
    tobi


Anmelden zum Antworten