You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在promised-sqlite3的SQLite查询中正确传递数组参数?

正确使用promised-sqlite3传递数组作为IN条件参数的方法

你的问题核心在于sqlite参数化查询中,IN子句无法直接接收数组作为单个参数,需要为数组每个元素生成独立的占位符。以下是正确的实现方式:

错误写法分析

  • 第一种写法IN ?:sqlite不支持将单个参数解析为多个值,语法不被识别。
  • 第二种写法IN (?):数组会被当作单个字符串值传入,导致无法匹配数组内的元素。
  • 字符串拼接写法:即便做了过滤,仍存在SQL注入风险,不符合安全规范。

正确实现

根据数组长度动态生成对应数量的占位符,再将数组元素展开为参数列表:

// 生成与数组长度匹配的占位符,如 videos 有3个元素则生成 "?, ?, ?"
const placeholders = videos.map(() => '?').join(', ');
// 构建带动态占位符的查询语句
const query = `SELECT video, offset, watched FROM watched WHERE user = ? AND video IN (${placeholders})`;
// 传入用户参数 + 数组展开后的元素
const result = await db.all(query, username(req), ...videos);

这种方式完全遵循参数化查询的安全规范,既能正确匹配数组内的元素,又从根源避免了SQL注入风险,是处理此类场景的标准做法。

内容的提问来源于stack exchange,提问作者kshetline

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 01:29:52