Frage

Wurde mit PHP / MySQL für eine Weile jetzt, und ich frage mich, ob es irgendwelche spezifischen Vorteile (Leistung oder anderweitig) ist mit mysql_fetch_object() vs mysql_fetch_assoc() / mysql_fetch_array().

War es hilfreich?

Lösung

Performance-weise ist es egal, was Sie verwenden. Der Unterschied besteht darin, dass mysql_fetch_object kehrt Objekt:

while ($row = mysql_fetch_object($result)) {
    echo $row->user_id;
    echo $row->fullname;
}

mysql_fetch_assoc () gibt assoziative Array:

while ($row = mysql_fetch_assoc($result)) {
    echo $row["userid"];
    echo $row["fullname"];
}

und mysql_fetch_array () gibt Array:

while ($row = mysql_fetch_array($result)) {
    echo $row[0];
    echo $row[1] ;
}

Andere Tipps

mysql_fetch_array macht den Code schwer zu lesen = ein maintenace Alptraum. Sie können nicht auf einen Blick sehen, welche Daten Ihr Objekt mit zu tun hat. Es etwas schneller, aber wenn das für Sie wichtig ist Sie verarbeiten so viele Daten, dass PHP ist wahrscheinlich nicht der richtige Weg zu gehen.

mysql_fetch_object hat einige Nachteile, vor allem, wenn Sie eine DB-Schicht auf sie stützen.

  • Die Spaltennamen sind möglicherweise nicht gültig PHP Bezeichner, z tax-allowance oder user.id, wenn Ihre Datenbanktreiber Sie den Spaltennamen gibt, wie in der Abfrage angegeben. Dann müssen Sie mit {} ganz über den Platz beginnen.

  • Wenn Sie eine Spalte basierend auf seinen Namen erhalten möchten, stroed in irgendeiner Variable müssen Sie auch $row->{$column_name} mit variablen Eigenschaften beginnen, während die Array-Syntax $row[$column_name]

  • Constructors nicht bekommen, wird aufgerufen, wenn Sie erwarten, wenn Sie den Klassennamen angeben.

  • Wenn Sie nicht die Klassennamen angeben, erhalten Sie einen stdClass, die als ein Array kaum besser ist sowieso.

mysql_fetch_assoc ist die einfachste der drei mit zu arbeiten, und Ich mag die Unterscheidung dieser zwischen Objekten und Datenbankergebniszeilen im Code gibt ...

$object->property=$row['column1'];
$object->property=$row[$column_name];
foreach($row as $column_name=>$column_value){...}

Während viele OOP-Fans (und ich bin ein Fan OOP) wie die Idee des Drehens alles in ein Objekt, ich glaube, dass das assoziative Array ist ein besseres Modell einer Zeile aus einer Datenbank als ein Objekt, wie es in meinem Kopf ein Objekt ist eine Reihe von Eigenschaften mit Methoden auf sie einwirken, während die Reihe nur Daten und soll als solche ohne weitere Komplikationen behandelt werden.

Etwas im Auge behalten: Arrays kann leicht zu einem Cache-Speicher (eaccelerator, XCache, ..) hinzugefügt werden, während Objekte können nicht (sie serialisiert erhalten müssen bei der Lagerung und unserialisierten bei jedem Abruf!)

.

Sie wechseln können Arrays anstelle von Objekten zu verwenden, wenn Sie Cache-Speicher-Unterstützung hinzufügen möchten - aber zu diesem Zeitpunkt können Sie bereits eine Menge Code ändern müssen, die die Objekttyp Rückgabewerte zuvor verwendeten verwendet

.

mit mysql_fetch_array() ein Array Fetching können Sie Schleife durch das Ergebnis entweder über eine foreach-Schleife oder einer for-Schleife gesetzt. mysql_fetch_object() kann nicht durch eine for-Schleife durchlaufen werden.

Nicht sicher, ob das auch viel ankommt, nur dachte ich, es erwähnen würde.

Wenn Sie darüber hinaus schließlich Memcaching zu Ihrem MySQL-Ergebnisse anwenden möchten, können Sie für Arrays entscheiden. Es scheint, es ist sicherer, Array-Typen zu speichern, anstatt Objekttyp Ergebnisse.

while ($Row = mysql_fetch_object($rs)) {
    // ...do stuff...
}

... ist, wie ich es immer getan habe. Ich ziehe es Objekte für Datensammlungen von Arrays anstatt zu verwenden, da sie die Daten eine wenig besser organisiert, und ich weiß, ich bin viel weniger wahrscheinlich, dass beliebige Eigenschaften zu einem Objekt hinzufügen, um zu versuchen, als ich bin, um zu versuchen, einen Index hinzufügen zu einem Array (für die ersten paar Jahre habe ich PHP verwendet, dachte ich Sie nicht nur beliebige Eigenschaften zu einem Objekt zuordnen konnte, so dass es tief verwurzelt nicht zu tun).

Ich denke, der Unterschied zwischen all diesen Funktionen unbedeutend ist, vor allem im Vergleich zu der Lesbarkeit des Codes.

Wenn Sie über diese Art von Optimierung betroffen sind, verwenden Sie mysql_fetch_row(). Es ist die schnellsten, weil es nicht assoziative Arrays nicht verwendet (zum Beispiel $ row [2]), aber es ist am einfachsten, Ihren Code mit ihm zu brechen.

Geschwindigkeit her mysql_fetch_object() ist identisch mit mysql_fetch_array(), und fast so schnell wie mysql_fetch_row().

Auch mit mysql_fetch_object() werden Sie nur in der Lage sein, Felddaten für den Zugriff durch Feldnamen entsprechen.

Ich stimme gegen mysql_fetch_array()

Weil Sie beide wieder numerisch indizierte Spalten und Spaltennamen, schafft dies ein Array, das doppelt so groß ist. Es ist in Ordnung, wenn Sie nicht Ihren Code debuggen müssen und sehen seinen Inhalt. Aber für den Rest von uns, wird es schwieriger, zu debuggen, da Sie durch doppelt so viele Daten in ein seltsam aussehenden Format waten.

ich manchmal in ein Projekt laufen, die diese Funktion verwendet dann, wenn ich debuggen, denke ich, dass etwas schrecklich schief gegangen ist, da ich numerische Spalten gemischt mit meinen Daten haben.

So im Namen der Vernunft, benutzen Sie bitte diese Funktion nicht verwenden, es macht Code Wartung schwieriger

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top