2009-07-09 14 views
19

Usando sqlite3, si mi consulta esSQLite vinculante dentro de cadena literal

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

que coincidirá con cadenas que contienen x. Quiero hacer x un parámetro que puede unirse, como:

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

Sin embargo, esto no funciona ya que el '' forma una cadena literal. ¿Hay alguna forma de escapar del ? dentro del literal? Entiendo que podría construir el parámetro enlazable para contener el % y luego usar

SELECT * FROM table WHERE title LIKE ?

pero esto mueve la responsabilidad en mi código en términos de manejo de inyecciones SQL en lugar de la interfaz se unen. ¿Hay una mejor solución para esto?

Respuesta

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

No es solo sqlite; '||' está en el estándar SQL; Postgres y Oracle siguen esto. MySQL y MSSQL usan 'CONCAT()' y '+' respectivamente, ambos no son estándar. – ephemient

Cuestiones relacionadas