2016-07-07 58 views
0

我有一種說法:逃離百分號準備聲明

(DB是一個sqlite3的實例)

local stmt = db:prepare("SELECT id, name FROM table WHERE name LIKE '%?%'") 
if stmt:bind_values("test") == sqlite3.OK then 
    .... 
end 

不過,我得到這個錯誤:

Incorrect number of parameters to bind (1 given, 0 to bind) 

似乎它沒有看到?作爲參數。我嘗試了從百分號轉換爲\和\\以及超越......的所有類型的轉義,讓我瘋狂。

任何人都知道如何解決這個問題?謝謝!

回答

2

你不能把裏面的參數報價:

correct:  SELECT ... WHERE foo = ? 
incorrect: SELECT ... WHERE foo = '?' 

隨着報價,它只是包含一個問號的字符串。沒有引號,它是一個佔位符。

你必須建立LIKE成塊,例如,

... WHERE foo LIKE '%' || ? || '%'