PHP mysql sonuçları - diziler ve nesneler?

9 Cevap php

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

9 Cevap

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.

Ile bir dizi getiriliyor mysql_fetch_array() döngüsü için bir foreach döngüsü veya üzerinden ayarlanan sonucu ile size döngü sağlar. mysql_fetch_object() döngü için bir tarafından geçilen olamaz.

Hatta konularda çok, sadece o söz düşündüm emin değilim.

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

Eğer sonunda MySQL sonuçlarına memcaching uygulamak istiyorsanız Ayrıca, diziler için tercih isteyebilirsiniz. Bu oldukça nesne türü sonuçlarına göre, dizi türlerini saklamak için daha güvenli görünüyor.

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.

Hız-bilge, mysql_fetch_object() mysql_fetch_array() ile aynıdır, ve mysql_fetch_row() gibi neredeyse çabuk.

Ayrıca, ile mysql_fetch_object() sadece alan adlarını karşılık gelen alan verilere erişmek mümkün olacak.

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