2009-12-12 31 views
5

MySQL/PHP ile parametreli sorguların nasıl kullanılacağını bana örnek verebilir misiniz?Parametreli sorgular için örnekler

+2

http://www.google.com.au/search?hl=en&source=hp&q=+MySQL++parameterized+queries&meta=&aq=f&oq= –

cevap

8

Parametreli sorgu esas itibariyle bütün giriş uzak özetleri bir sorgu. Bu, tüm girdilerin zararsız hale getirilmesi (yani, hiçbir zararlı enjeksiyonun mümkün olmaması) ve tekrar tekrar kullanıldığında daha hızlı hale getirilmesi gibi çok iyi yan etkilere sahiptir, çünkü önceden ayrıştırılmış ve derlenmiş olduğundan, motor verilen girişi nasıl uygulayacağını bilir. Saf mysql bir örnek:

PREPARE qry FROM "INSERT INTO tbl VALUES (?)"; 

beyannameniz derlenmiş ve önbelleğe ve yeniden derlemek ve yorumlamak gerek kalmadan tekrar tekrar çalıştırılabilir edilir: PHP kullanıldığında

SET @var = "some input"; 
EXECUTE qry USING @var; 
SET @var = "some other input"; 
EXECUTE qry USING @var; 

, genellikle gibi Bu (kısaltılmış):

$stmt = prepare('INSERT INTO tbl VALUES(?)'); 
execute($stmt, array("some input")); 
execute($stmt, array("some other input")); 
execute($stmt, array("some more input")); 
+0

ben tam anlamıyorum Bu nasıl SQL enjeksiyon durur. Bunun olduğundan şüphem yok, ama daha fazlasını açıklayabilir misiniz? –

+2

Sorgu, herhangi bir parametrenin içine girilmeden önce önceden derlendiği için. Ve böylece bir parametre ''; SADECE SİPARİŞ; ya da bunun gibi bir şey olsa bile, sadece derlenmiş deyimin tam bir dizge olduğu her yere eklenir, çünkü ana ifadeden çözümleyiciden geçmez. zaten ayrıştırıldı. 'eval ("new class ($ data);") 'ile veriyi karşılaştırabilirsiniz.)' 'data olmaktan kaçınmak' ', delete_all_my_files ('. Önceden tanımlanmış ifadeler temel olarak "eval" sorunu. –

4
PREPARE stmt_name FROM "SELECT name FROM Country WHERE code = ?"; 

SET @test_parm = "FIN"; 

EXECUTE stmt_name USING @test_parm; 

Kaynak: MySQL Dev: Prepared Statements