2009-07-09 12 views
19

Utilizzando sqlite3, se la mia domanda èSqlite vincolante entro stringa letterale

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

abbinerà stringhe contenenti x. Voglio fare x un parametro associabile, come:

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

Tuttavia, questo non funziona in quanto il modulo '' una stringa letterale. C'è un modo per sfuggire allo ? all'interno del letterale? Capisco che ho potuto costruire il parametro associabile a contenere il % e quindi utilizzare

SELECT * FROM table WHERE title LIKE ?

ma questo sposta la responsabilità nel mio codice in termini di gestione di iniezioni SQL, piuttosto che l'interfaccia di collegamento. C'è una soluzione migliore per questo?

risposta

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

Non è solo sqlite; '||' è nello standard SQL; Postgres e Oracle seguono questo. MySQL e MSSQL usano rispettivamente 'CONCAT()' e '+', entrambi sono non standard. – ephemient

Problemi correlati