PHP'de sayfa oluştururken, genellikle kendimi veritabanı sorgularıyla dolu bir dosya kümesi yazarken bulurum. Örneğin, aşağıdaki gibi bir sayfada görüntülemek için doğrudan veritabanından bir yazı hakkında bazı verileri almak için bir sorgu olabilir:
$statement = $db->prepare('SELECT * FROM posts WHERE id=:id');
$statement->bindValue(':id', $id, PDO::PARAM_INT);
$statement->execute();
$post = $statement->fetch(PDO::FETCH_ASSOC);
$content = $post['content']
// do something with the content
Bu hızlı, tek seferlik sorgular genellikle küçüktür, ancak bazen oldukça dağınık görünmeye başlayan veritabanı etkileşim kodunun büyük bölümleriyle sonuçlanır.
Bazı durumlarda, post-ilgili db sorgularımı işlemek için basit bir fonksiyon kütüphanesi oluşturarak bu kod bloğunu basit bir kısaltmaya yaratarak bu sorunu çözdüm:
$content = post_get_content($id);
Ve bu harika. Ya da en azından başka bir şey yapmam gerekene kadar. Belki bir listede görüntülenmesi için en son beş gönderiyi almam gerekiyor. Her zaman başka bir işlev ekleyebilirim:
$recent_posts = post_get_recent(5);
foreach ($recent_posts as $post) { ... }
Ancak bu SELECT *
, genellikle gerçekten ihtiyacım olmayan bir sorgu kullanarak sonuçlanır , ancak genellikle makul soyut için çok karmaşıktır. Sonunda, her bir kullanım durumu için büyük bir veritabanı etkileşimi işlevleri kütüphanesi veya her sayfanın kodunun içinde bir dizi dağınık sorgu ile sonuçlanır. Ve bu kütüphaneleri inşa ettikten sonra bile, kendimi daha önce kullanmadığım küçük bir birleşim yapmaya ihtiyaç duyacağım ve aniden işi yapmak için başka bir yüksek uzmanlık işlevi yazmam gerekiyor.
Elbette, işlevleri özel etkileşimler için genel kullanım durumları ve sorguları için kullanabilirim, ancak ham sorgular yazmaya başlar başlamaz her şey için doğrudan erişime geri dönmeye başlarım. Ya bu, ya da tembelleşeceğim ve gerçekten de doğrudan MySQL sorgularında yapılması gereken PHP döngülerinde bir şeyler yapmaya başlayacağım.
İnternet uygulamaları yazarken daha deneyimli olanlara sormak istiyorum: sürdürülebilirlik artışı, ekstra kod satırlarına ve soyutlamaların getirebileceği olası verimsizliklere değer mi? Yoksa doğrudan sorgu dizelerini kullanmak, veritabanı etkileşimlerini ele almak için kabul edilebilir bir yöntem midir?
select
s - si "sarmak" için saklı yordamlar kullanabilirsiniz sadece ihtiyacınız olan bazı parametreler ile bu prosedürleri çağırmak gerekir