2009-07-09 8 views
19

En utilisant sqlite3, si ma requête estSqlite obligatoire au sein chaîne littérale

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

Il correspondront des chaînes qui contiennent x. Je veux faire x un paramètre pouvant être lié, comme:

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

Cependant, cela ne fonctionne pas puisque la forme '' une chaîne littérale. Y at-il un moyen d'échapper à la ? dans le littéral? Je comprends que je pourrais construire le paramètre bindable pour contenir la % puis utilisez

SELECT * FROM table WHERE title LIKE ?

mais cela déplace la responsabilité dans mon code en termes de traitement des injections SQL plutôt que l'interface de liaison. Y a-t-il une meilleure solution pour cela?

Répondre

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

Ce n'est pas seulement sqlite; '||' est dans le standard SQL; Postgres et Oracle suivent cela. MySQL et MSSQL utilisent 'CONCAT()' et '+' respectivement, les deux sont non standard. – ephemient

Questions connexes