MySQL seçerek için bir işlev yapma, ne benim?

3 Cevap php

Bu benim ilk kez. Ben herhangi bir düşünce, ipuçları ve ne değildir takdir edecektir. Bunu nasıl artırabilir? Sonuçta, benim komut pek çok seçer istemiyorum. Ben fonksiyonu MySQL türü oluşmalıdır bilmiyorum. Ben içermelidir ne herhangi girişleri, mysql_query (), ayrıca çok iyi olurdu.

function mysqlSelectCodes($table, $where, $order, $limit) { $sql = "SELECT * FROM $table WHERE $where ORDER BY $order LIMIT $limit" or die(mysql_error());

}

3 Cevap

Bu kod şey aslında wil. Sadece bir sorgu dizesi yapıyolar ama sorguyu yürütmek yok.

Hiçbir ek tedbirler varsa, bu kod SQL Injection saldırılara çok eğilimli.

Sen PHP manual for PDO okumak isteyebilirsiniz. Bu size yardımcı olacaktır.

Bu yardım için soruyorsun iyi, ben sizi vazgeçirmek söylemek üzereyim ne lütfen izin vermeyin - ona çalışmaya devam! Orada bu ile ilgili sorunlar bir yeri vardır, bu yüzden sadece birkaç dışarı atmak olacak:

  1. o ($ sql küresel ise, bu olmamalı) bir şey çıkmıyorsa, çünkü bu gerçekten bir şey yapmaz
  2. en.wikipedia.org/wiki/SQL_injection
  3. or die(...) Böyle bir dize üreticisi ait etmem - Verilen hat başarılı olursa onun için deniyor tüm bu yana burada SQL hataları işlemek için gitmiyor.

Benim tavsiyem: Herhalde bunu yapmak için rahatsız olmaz. Dışında özel sorunları diğerlerinden Ben bu ile sahip daha büyük bir sorun var, (SQL enjeksiyonu, geri dönmek için unuttum) dikkat çekmişlerdir: Tüm sorguları bu forma güzel uyacak olduğunu varsayıyoruz. Lütfen fonksiyon sınırlamalar şunlardır:

  • Birden fazla tablo birleştirme desteği yok.
  • İç seçer desteği yok.
  • Kötü bir fikir genel olarak - her zaman kullanarak * tüm sütunları seçmek. Sen sadece bazı sütunları seçmek için hiçbir destek yok.
  • Için desteği yok GROUP BY.
  • Tüm satırları istediğiniz zaman hala nerede '1 = 1 gibi bir deyimi 'geçmek zorunda.
  • vs ..

Şimdi bu diğer olasılıklar için izin vermek fonksiyonunu genişletmek olabilir, ama daha karmaşık hale gelecektir ve sadece SQL sorguları oluşturmak için özel bir dil ile bitireceğiz ancak SQL benzemez. Bazen bir SQL veritabanı erişim için özel bir dil oluşturmak için iyi bir fikirdir ama çoğunlukla sadece zaman kaybıdır ve zor diğerleri kodunuzu anlamak için yapacaktır. Standart kütüphaneler ve standart arayüzleri kullanarak mümkün sopa. SQL kullanarak kaçınmak istiyorsanız, bunun yerine bir Object-Relational Mapping (ORM) kullanarak araştırmak olabilir.

Eğer kod dışarı SQL tutmak istiyorsanız, aslında yerine çok genel bir şey sizin uygulama (getFriends, getPostsByUser) özel bir şey yapar bir arayüz yapmayı deneyin.