2009-07-09 17 views
19

literal dize içinde bağlayıcı.SQLite, sqlite3 kullanarak

SELECT * FROM table WHERE title LIKE '%x?%'

Ancak bu '' formu değişmez bir dize beri çalışmıyor: Ben gibi x bir bağlanabilir parametreyi yapmak istiyorum. Literatürde ?'dan kaçmanın bir yolu var mı? Ben % içerdiği bağlanabilir parametreyi oluşturmak ve daha sonra

SELECT * FROM table WHERE title LIKE ?

kullanmak ancak bu SQL enjeksiyonu yerine bağlamak arayüzünü taşıma açısından benim koduna sorumluluğunu taşır olabileceğini anlıyoruz. Bunun için daha güzel bir çözüm var mı?

cevap

34
SELECT * FROM table WHERE title LIKE '%' || ? || '%'; 
+5

Sadece sqlite değil; '||' SQL standardındadır; Postgres ve Oracle bunu takip ediyor. MySQL ve MSSQL, sırasıyla CONCAT() 've' + 'işlevlerini kullanır, her ikisi de standart değildir. – ephemient