2009-07-09 3 views
19

Используя sqlite3, если мой запросSqlite связывания в строковый литерал

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

Это будет соответствовать строки, содержащие x. Я хочу сделать x связываемого параметр, как:

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

Однако, это не работает, так как '' Сформировать строку. Есть ли способ избежать ? в литеральном? Я понимаю, что я мог бы построить связываемый параметр, чтобы содержать %, а затем использовать

SELECT * FROM table WHERE title LIKE ?

но это перемещает ответственность в мой код с точкой зрения обработки инъекции SQL, а не интерфейс привязки. Есть ли лучшее решение для этого?

ответ

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

Это не просто sqlite; '||' находится в стандарте SQL; Postgres и Oracle следуют этому. MySQL и MSSQL используют 'CONCAT()' и '+' соответственно, оба являются нестандартными. – ephemient

Смежные вопросы