SQLite:将值列表绑定(bind)到 "WHERE col IN ( :PRM )"

标签 sqlite select prepared-statement bind

我只想发送一个查询

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/

相关文章:

ios - SQLite 选择查询。用数组获取行

java - Sqlite 按距离现在最近的时间排序

mysql - 如何mysql从所有wp用户中选择第二个附件

java - 在 select 语句中带有参数化 where 子句的 PreparedStatement 抛出异常

java - 如何使用 ormlite 4.42 持久保存foreignCollection?

java - 如何检查特定日期时间是否位于相邻行日期之间?

php - 需要mysql select data where until的解决方案

ruby-on-rails - Formtastic 复选框提交带有空白条目的列表(除了选择的 ID)

c++ - 使用 Select 准备好的语句?可能的?

php - mysqli_fetch_assoc()需要参数/调用成员函数bind_param()错误。如何获取并修复实际的mysql错误?