我只想发送一个查询
SELECT * FROM table WHERE col IN (110, 130, 90);
所以我准备了以下声明
SELECT * FROM table WHERE col IN (:LST);
然后我用
sqlite_bind_text(stmt, 1, "110, 130, 90", -1, SQLITE_STATIC);
不幸的是,这变成了
SELECT * FROM table WHERE col IN ('110, 130, 90');
and 是无用的(注意两个额外的单引号)。我已经尝试在字符串中添加额外的 ' 但它们被转义了。我没有找到关闭转义或防止文本被单引号括起来的选项。我能想到的最后一件事是不使用准备好的语句,但我只会把它作为最后的选择。您有什么想法或建议吗?
谢谢
编辑:
参数的数量是动态的,所以它可能是三个数字,如上例所示,一个或十二个。
最佳答案
你可以动态构建一个参数化的 SQL 语句的形式
SELECT * FROM TABLE WHERE col IN (?, ?, ?)
然后为每个“?”调用 sqlite_bind_int 一次您添加到声明中。
无法将文本参数直接绑定(bind)到多个整数(或者,就此而言,多个文本)参数。
这是我所想的伪代码:
-- Args is an array of parameter values
for i = Lo(Args) to Hi(Args)
paramlist = paramlist + ', ?'
sql = 'SELECT * FROM TABLE WHERE col IN (' + Right(paramlist, 3) + ')'
for i = Lo(Args) to Hi(Args)
sql_bind_int(sql, i, Args[i]
-- execute query here.
关于SQLite:将值列表绑定(bind)到 "WHERE col IN ( :PRM )",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4788724/