Şimdi ise biraz PHP / MySQL kullanıyorum, ve mysql_fetch_object () Mysql_Fetch_Assoc vs () / mysql_fetch_array () kullanarak (başka türlü performans veya) herhangi bir özel avantajlar vardır merak ediyorum.
Performans açısından bu ne kullandığınız önemli değildir. Fark mysql_fetch_object döner nesne olduğunu:
while ($row = mysql_fetch_object($result)) {
echo $row->user_id;
echo $row->fullname;
}
mysql_fetch_array () ilişkisel dizi döndürür:
while ($row = mysql_fetch_assoc($result)) {
echo $row["userid"];
echo $row["fullname"];
}
ve mysql_fetch_array () dizi döndürür:
while ($row = mysql_fetch_array($result)) {
echo $row[0];
echo $row[1] ;
}
mysql_fetch_array
bir Tamiratlarda kabus = okumak için kod zorlaştırır. Size nesne ile ilgili hangi verilerin bir bakışta göremiyorum. Bu sizin için önemli ise biraz daha hızlı, ama PHP muhtemelen gitmek için doğru bir yol değildir çok veri işliyoruz.
mysql_fetch_object
bunu bir db katmanı temel, özellikle bazı sakıncaları vardır.
Sorguda belirtilen veritabanı sürücüsü size sütun adını veren Sütun adları, örneğin tax-allowance
veya user.id
, geçerli PHP tanımlayıcılar olmayabilir. Sonra {}
her yerde kullanmaya başlamak gerekir.
Bazı değişkene stroed adını dayalı bir sütun almak istiyorsanız siz de iken dizi sözdizimi $row[$column_name]
, değişken özellikleri $row->{$column_name}
kullanarak başlamak zorunda
Eğer classname belirtirseniz eğer beklediğiniz zaman Kurucular çağrılan alamadım.
Eğer sınıf adını belirtin yoksa zaten bir dizi daha zor daha iyi olduğunu, bir stdClass
olsun.
mysql_fetch_assoc
ile çalışmak için üç kolay olduğunu, ve ben bu nesneleri ve veritabanı sonuç satırlar arasında kod veren ayrımı gibi ...
$object->property=$row['column1'];
$object->property=$row[$column_name];
foreach($row as $column_name=>$column_value){...}
everything bir nesnenin içine dönüm fikir gibi birçok OOP fanlar (ve ben bir OOP fanatiğiyim), ben ilişkisel dizi olarak, bir nesnenin farklı bir veritabanında bir satır daha iyi bir model olduğunu hissediyorum süre satır sadece veri ve daha fazla komplikasyon olmadan gibi tedavi edilmelidir ise aklım bir nesne, onlara hareket yöntemleri ile özellikleri bir dizi.
Akılda tutulması gereken bir şey: nesneleri (her alma üzerine depolama ve dizgilenmemiş zaman tefrika almak gerekir!) Olamaz iken dizileri kolayca, bir önbellek (eaccelerator, XCache, ..) eklenebilir.
Eğer önbellek desteği eklemek istediğiniz zaman nesneler yerine diziler kullanarak geçiş olabilir - ama o zaman size önceden kullanılan nesne türü dönüş değerleri kullanır, zaten bir sürü kod değiştirmek zorunda kalabilirsiniz.
while ($Row = mysql_fetch_object($rs)) {
// ...do stuff...
}
... Ben hep bunu yaptık nasıl. Ben biraz daha iyi veri organize beri, yerine dizilerin veri koleksiyonları için nesneleri kullanmayı tercih, ve ben bir dizin eklemek için denemek için benden bir nesneye rasgele özellikleri eklemek için denemek için bir çok daha az biliyorum bir diziye (PHP kullanılan ilk birkaç yıl boyunca, ben sadece bir nesneye rasgele özellikleri atamak olamayacağını düşündüm, bu yüzden bunu yapmak değil kökleşmiş oluyor).
Tüm bu fonksiyonlar arasındaki fark kod okunabilirliği ile karşılaştırıldığında, özellikle, önemsiz olduğunu düşünüyorum.
Optimizasyon, kullanımı bu tür endişe ediyorsanız mysql_fetch_row()
. De (örneğin $ row [2]) ilişkilendirilebilir diziler kullanmak değildir çünkü hızlı, ama onunla kodu kırmak için en kolay.
I mysql_fetch_array()
karşı oy
Geri sayısal endeksli sütun ve sütun adlarını olsun çünkü, bu iki kat daha büyük olan bir dizi oluşturur. Eğer kod hata ayıklama ve içeriğini görmek gerekmez eğer iyi. Ama bize geri kalanı için, bu garip görünümlü bir biçimde iki katı kadar veri zorla okumak zorunda beri hata ayıklamak için zorlaşır.
Bazen ben hata ayıklama, benim verileriyle karışır sayısal sütunlar beri bir şey çok yanlış gitti düşünüyorum sonra bu işlevini kullanan bir proje içine çalıştırın.
Aklı adına, bu işlevi kullanmayın lütfen Yani, kod bakım zorlaştırır