mysql_fetch_array() oder mysql_fetch_object()?

Der_Jan

Der_Jan

Aktives Mitglied
Thread Starter
Dabei seit
06.01.2004
Beiträge
712
Reaktionspunkte
30
Bis heute frage ich meine MySQL per mysql_fetch_array() ab - klappt wunderbar - keine Probleme. Ich habe bei anderen Projekten nun häufiger gesehen, dass Kollegen mit mysql_fetch_object() arbeiten. Ich natürlich neugierig, was wohl der Unterschied ist. Okay, das eine erstellt einen Array, das andere ein Objekt. Besteht irgendeine Notwendigkeit (Sicherheit, Serverbelastung???), künftig nur noch mit mysql_fetch_object() zu arbeiten. Man will ja mit der Zeit gehen ;)

Danke & Gruß
Der Jan
 
mysql_fetch_array() ist immer dann ein Problem, wenn Du die Reihenfolge der Spalten änderst die Du abfragst. Nett ist auch eine Änderung der Tabelle und dann weiter eine Abfrage mit "select *" und fetch_object. Dann KANN es passieren, daß in einer vermeintlichen Peisspalte z.B. der Mwst-Satz steht.

Mit Objekten greifst Du halt eindeutig per Name zu:
$result->preis

Das ist einfacher und robuster gegen Änderungen! Vor allem in Bezug auf die Wartung von Skripten die auf diese Spalten zugreifen.
 
wegus schrieb:
mysql_fetch_array() ist immer dann ein Problem, wenn Du die Reihenfolge der Spalten änderst die Du abfragst. Nett ist auch eine Änderung der Tabelle und dann weiter eine Abfrage mit "select *" und fetch_object. Dann KANN es passieren, daß in einer vermeintlichen Peisspalte z.B. der Mwst-Satz steht.

Mit Objekten greifst Du halt eindeutig per Name zu:
$result->preis

Das ist einfacher und robuster gegen Änderungen! Vor allem in Bezug auf die Wartung von Skripten die auf diese Spalten zugreifen.

Kann meinen Vorredner nur zustimmen, allerdings solltest Du bei großen DB mit vielen Spalten daraufh achten, das Object ein kleiner "Speicherverschwender" werden kann.

Wenn Du nicht vorhast, ständig die Spaltenreihenfolge zu ändern, würde ich zwecks Performance und Speicherverbrauch, auf fetch_array() setzen.
 
Nachtschatten schrieb:
Kann meinen Vorredner nur zustimmen, allerdings solltest Du bei großen DB mit vielen Spalten daraufh achten, das Object ein kleiner "Speicherverschwender" werden kann.

Das stimmt, man kommt dann aber an die Grenze wo man sich fragt, ob die Investition in "die paar Bytes" nicht durch die gewonnene Stabilität wieder ausgeglichen werden. Ich Kapsele beizeiten spezielle Tabellen komplett in Objekten, inklusive Zugriffsmethoden. Dies bei Tabellen bei denen jede Zeile 2-3KB hat und durchaus im Schnitt einige 100 davon je Abfrage zusammenkommen können. Ich kann eine solche Kapselung nur empfehlen, den Preis dafür hat Nachtschatten allerdings genannt!
 
wegus schrieb:
Mit Objekten greifst Du halt eindeutig per Name zu:
$result->preis

und wer hindert dich bei einem array mit $result[preis] zu arbeiten? ;)
 
So arbeite ich z. B. und bekomme auch bei nachträglichen Änderungen in der DB keine Probleme mit den Feldern...

2nd
 
oneOeight schrieb:
und wer hindert dich bei einem array mit $result[preis] zu arbeiten? ;)


Ich hindere mich ;)
weil ich die Tabellen komplett in Objekten kapsele (s.o.) !
 
wegus schrieb:
Ich hindere mich ;)
weil ich die Tabellen komplett in Objekten kapsele (s.o.) !

das sollte auch nur sagen, dein beispiel war jetzt kein gutes argument warum man das machen sollte ;)
 
oneOeight schrieb:
und wer hindert dich bei einem array mit $result[preis] zu arbeiten? ;)

Begebe mich jetzt auf glattes Eis, aber ist es nicht so das man array sinnvoll bei SELECT bla1, bla2, bla3 .... anwendet und Object bei der "faulen" Abfrage Select * ... ?
 
also ich sehe zwischen Array und Object keinen grossen Unterschied.. man greift ja mit beiden direkt auf den Spaltennamen zu, egal wo er in der Tabelle steht...

einzig mysql_fetch_row macht keinen Sinn, ausser man fragt ganz definierte Felder ab..
 
Also macht im Alltag nicht den großen Unterschied, als das man nun alle Scripte umschreiben müßte.

Anschlußfrage zum Ansprechen des arrays.

Habe meine Abfrage im Array $result gespeichert.

Einmal klappt der Zugriff auf den Vornamen mit
PHP:
echo"...<td>$result[vorname]</td>..."

Bei Schleifen verlangt der Server aber vorname in '...' ("Gänsefüsschen" ;) ).
PHP:
if ($result['vorname']=....)...

Kann das sein? Ich meine einmal ohne, das andere mal mit '...'?

Danke & Gruß
Der Jan
 
Nachtschatten schrieb:
Begebe mich jetzt auf glattes Eis, aber ist es nicht so das man array sinnvoll bei SELECT bla1, bla2, bla3 .... anwendet und Object bei der "faulen" Abfrage Select * ... ?

fetch_array nimmt man wenn man ein array braucht und fetch_obj wenn man ein Objekt benötigt :D SCNR
Es gibt für Vieles einen Grund und daher eben auch die unterschiedlichen Methoden!
 
Der Jan schrieb:
echo"...<td>$result[vorname]</td>..."

solltest Du besser als

echo"...<td>".$result[vorname]."</td>..."

schreiben! Grund:

spätestens bei:

echo"...<td>$result[27][vorname]</td>..."

oder

echo"...<td>$result[$cnt]</td>..."

kommt PHP da ganz durcheinander! Vielleicht erklärt das einen Teil Deines Problems
 
wegus schrieb:
fetch_array nimmt man wenn man ein array braucht und fetch_obj wenn man ein Objekt benötigt :D SCNR
Es gibt für Vieles einen Grund und daher eben auch die unterschiedlichen Methoden!

*plonk*

Stimmt, manches liegt ZU nahe :=)
 
Der_Jan schrieb:
Einmal klappt der Zugriff auf den Vornamen mit
PHP:
echo"...<td>$result[vorname]</td>..."

Bei Schleifen verlangt der Server aber vorname in '...' ("Gänsefüsschen" ;) ).
PHP:
if ($result['vorname']=....)...

Kann das sein? Ich meine einmal ohne, das andere mal mit '...'?
Das liegt daran, dass PHP deinen String fuer eine Konstante
haelt, wenn du ihn nicht in Hochkommata oder Anfuehrungs-
zeichen kapselst.

Und da nicht definierte Konstanten den Wert ihres Namens
haben, muss man theoretisch gar keine Hochkommata oder
Anfuehrungszeichen mehr verwenden :rolleyes:
 
Zurück
Oben Unten