iyi bir fikir MySQLi geçmek?

2 Cevap php

Ben bütün php projeler için MySQLi geçiş düşünüyorum. Benim kod yazılır yolu (ben çok basit bir web sitesi çalıştırmak ve bunların tamamında kullanmak benim kendi temel oluşturmuştur) Ben işlevleri ve sınıfları değiştirerek çok sorunları olmamalıdır.

Ancak, ben sadece php fonksiyonları, bir süre mysql_fetch_array kullanmak için basit bir değiştirme en önemlisi eksikliği ile ilgili bir kaç grumblings bar, hazırlanan tablolar hakkında olumlu şeyler duydum.

Bu gerçek olamayacak kadar iyi biraz geliyor, bu yüzden herkes, hız ve kaynak kullanımı gibi hazırlanmış deyimleri, kullanarak bazı sorunları vurgulamak olabilir merak ettim.

2 Cevap

Hazırlanan tablolar için programlama sadece dizeleri sorgulamak değişkenleri ekleme için kullanılır eğer alışmak biraz alır. MySQL konumsal parametreleri kullanan (yerine vars nereye ait sorgu soru işaretleri içerir). En iyi bahis mevcut veritabanı soyutlama içine bu koymaktır. Bu soyutlama doğru yazılmış olsaydı, yine sarıcı dışında mysql_fetch_array çağrı olmamalıdır.

Bu sorunun çözümü sadece önceden tüm satırları toplamak için, ama tabii ki 1000 satır almak ve sadece ilki için sormayın varsayar. Bu ne olursa olsun mysqli'nin yapmak gereken bir değişikliktir.

Son olarak, bazı ifadeler kolaylıkla böyle argüman değişken numaraları ile in('x', 'y', 'z') sözdizimi kullanarak sorgular gibi parametreler tarafından değiştirilir. Bu yapılabilir, ama muhtemelen sorguları oluşturmak için izin yanı sıra bunları yürütmek için veritabanı soyutlama zenginleştirmek isteyeceksiniz.

Tradeoff olsa da, performans ve güvenlik açısından, kesinlikle buna değer. PHP tarafında ek işlem genellikle MySQL tarafında sorguları için önbelleğe alınan yürütme planları ile galip ve en yaygın SQL injection açıkları birçok bağışıklık edilir.

Hope that helps, Joe

Hazırlanan tablolar onlara alışmak kez painful yeniden işlevlerini kaçan kullanmak için o kadar iyi. Dönemi.

Ancak, (... oci8 ve sqlsrv dahil) şimdiye kadar kullanılan tüm DB kütüphaneleri tek bir cilvesi ya da başka tanıtmak. Yani temelde bir şekilde özellikleri sağlayan özel sınıflar basit bir set ile kullanmak ne olursa olsun kütüphane saklanması I gibi:

  • Adı tabanlı parametreler: WHERE foo = :foo
  • (Bireysel PHP değişkenlere bağlama hariç) ilişkisel dizi değer tarafından geçirilen Parametre: $params = array('foo' => 33)
  • Bir satırı icra: $res = $Db->query($sql, $params);
  • Resultsets Iterator arabirimini uygulayan nesneler, bu yüzden can foreach($res as $row) ile döngü

Böyle bir politika benimseyerek tam sözdizimi veya fonksiyon seti daha az önemli hale getirmektedir.

Bu hemen hemen her kütüphane ile gerçekleştirilebilir ise o kadar bağlayıcı yerli param sağlar eğer ne olursa olsun, bu (örneğin) veri türünü tahmin etmek zorunda değilsiniz olur. Ayrıca, işlemleri gibi bazı gelişmiş işlevler sadece düz mysql fonksiyonları ile yapılamaz.

PDO güzel bir alternatif olabilirdi ama aslında bunu tuzaklardan keyfini bir DB-agnostik soyutlama katmanı olmasının yararı gevşek yüzden onun sürücülerin en temelde terk edilir.

IMHO, soran olduğu gerçeği mysqli bir şans vermek gerektiğini düşünüyoruz.