我正在尝试为依赖 SQLite 进行持久存储的基于 Web 的应用程序创建一个过滤器函数。我正在尝试使用准备好的语句,但它必须根据用户选中的框数动态创建。我创建了一个动态添加的查询?占位符(使用IN 子句和 placeholders的建议)。
我已经在正确的位置创建了正确数量的 ?s,但我无法弄清楚如何将值添加到 [...] 内的参数中。
当我使用包含 [...] 内所有参数值的变量时,我收到错误“语句字符串中的 '? 的数量与参数字符串不匹配”。我还尝试为每组占位符使用一个变量。那也没用。我想根据参数的数量检查占位符的数量,并在读取变量之前返回错误。
// just spaced it with returns and removed the +'s and "'s to make it easier to read
var filterQuery = SELECT t1.col1, t1.col2, t1.col3, t2.col2, t3.col2
FROM t1, t2, t3
WHERE t1.col2 = ?
AND t1.col3 IN ( ?, ?, ?)
AND t2.col2 IN ( ?, ?, ?, ?)
代码:
db.transaction(function(tx) {
tx.executeSql(
filterQuery,
[/* what do I put in here so that the number of ?s matches with the number of parameters? */],
success,
failure
);
});
如何动态插入参数,使它们匹配占位符的数量并避免不匹配错误?
澄清:我已经成功地运行了没有准备好的语句的查询。我希望有一个解决方案可以让我使用它们。
(额外的问题——这个查询会做我希望它做的事情,即只抓取与用户所做的所有选择匹配的行吗?)
提前致谢!