2009-07-09 11 views
19

私のクエリが文字列リテラル内のSqliteバインディング

である場合、sqlite3を使用する

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

関連する問題