GÜNCELLEME ve sözdizimi INSERT farklılıklar bir rahatsızlık olduğunu

3 Cevap

Ben bugün bu yazı ile gidiyordu.

http://vinothbabu.com/2010/05/08/update-and-insert-differences-in-syntax-is-an-inconvenience/

Ben yazar tarafından yazılmış kodun bu kısmını anlamak mümkün değildi.

    list($sets,$cols,$values)=escape_arr($sets);

    $insert_sql=”INSERT INTO `avatars` “.implode(’,',$cols).” 
    VALUES(”.implode(’,',$values).”)”;

    $update_sql=”UPDATE `avatars` SET “.implode(’,',$sets).”
    WHERE userid=$userid LIMIT 1″;

ve nihayet yazının sonuç kısmı.

3 Cevap

PHP implode virgülle ayrılmış bir dizeye sütun adlarının dizi döner. Bu INSERT deyiminde değerleri için aynı işi yapar.

$ Setleri sütun ad / değer çiftleri bir ilişkisel dizi olarak başlar. Bu ifade:

list($sets, $cols, $values) = escape_arr($sets);

$ değişkeni "column_name = 'değer'" gibi dizeleri içeren düzenli bir dizi olarak ayarlar atar. Bu 3 dizileri döndüren makalesinde yardımcı fonksiyon escape_arr ile yapar. Eğer ne yaptığından emin değilseniz list için belgelerine bakın.

Sonra $sets dizisinin büyük bir virgülle ayrılmış dize oluşturmak için tekrar implode fonksiyonunu kullanır. Yani etkili, aynı zamanda INSERT ve UPDATE hem anahtarları gibi sütun adlarını içeren bir ilişkisel dizi verilen ifadeleri ve onların değerlerini oluşturur ... değerleri.

O soru? Bunu her adımda ne yaptığını takip etmek kodunda bazı var_dump ifadeleri ekleyebilirsiniz.

Edit: Dağınık açıklama için üzgünüm, ama ben şimdi gitmem lazım :)

Bir yan not olarak, MySQL ınsert'ler yılında UPDATE sözdizimi kullanabilirsiniz:

INSERT [INTO] tbl
    SET col1 = 'value', col2 = 'value', col3 = 'value', ...

Tam dokümantasyon için MySQL INSERT syntax bakın.

Bu hiç mantıklı değil. O nesneler (WTF?) Gibi onlar hakkında düşünme önleyebilirsiniz bu şekilde o hardcoding görünüşe göre bu yaptığını tam olarak ne olduğunu anlamış değil, kötü anlatmak için gider çünkü sorguları kodlamalısınız önerir. Ayrıca. WHERE userid=$userid LIMIT 1 tırnak SQL enjeksiyonu neden olabilir ihmal, kötü kodlama uygulamadır. Ve neden LİMİT 1? O olmayan benzersiz kimliği kullanıyor?

Bu tür veri erişim nesneleri, nesne-ilişkisel eşleme, aktif kayıtları gibi veritabanı katmanı ayrılması için Saner çözümleri bir yeri vardır ...