2016-07-07 40 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 '%' || ? || '%'