2009-07-09 7 views
19

Mit sqlite3, wenn meine AbfrageSqlite Bindung innerhalb Stringliteral

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

Es Saiten entsprechen, die x enthalten ist. Ich möchte x einen bindungsfähigen Parameter machen, wie:

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

Dies ist jedoch nicht, da die '' Form wörtliche ein String funktioniert. Gibt es eine Möglichkeit, die ? im Literal zu entkommen? Ich verstehe, dass ich die bindungsfähigen Parameter bauen konnte die % und dann

SELECT * FROM table WHERE title LIKE ?

verwenden enthalten, aber diese bewegt die Verantwortung in meinen Code in Bezug auf SQL-Injections Umgang anstatt die bind-Schnittstelle. Gibt es dafür eine bessere Lösung?

Antwort

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

Es ist nicht nur sqlite; '||' steht im SQL-Standard; Postgres und Oracle folgen diesem Beispiel. MySQL und MSSQL verwenden 'CONCAT()' und '+', beide sind nicht standardisiert. – ephemient

Verwandte Themen