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

如何从JavaScript提取ID数组用于SQL IN子句?解决语法报错

解决SQL WHERE IN子句的整数语法报错问题

问题场景

你在SQL语句中用WHERE子句过滤ID:

WHERE sa.id IN({{ testFetchID.value}})

其中testFetchID.value通过以下JavaScript代码获取ID数组:

const id = Array.from({{ employeesT.selectedRow.data }}.map((item) => item.id))
return id

预期传入的是1,14,15这类整数列表,但执行时抛出错误:

invalid input syntax for integer: "{"1","10"}"

报错原因

核心问题是模板引擎把JS返回的数组直接序列化成了带引号的JSON字符串(比如["1","10"]),而SQL的IN子句需要的是无引号的整数序列。数据库把这个带引号的字符串当成了单个值,无法解析成整数,所以触发语法错误。

解决方法

方法1:在JS中直接生成逗号分隔的整数字符串(推荐)

修改获取ID的JS代码,把数组转成不带引号的逗号分隔字符串:

const ids = {{ employeesT.selectedRow.data }}.map(item => item.id).join(',')
return ids

这样testFetchID.value会直接输出1,10,代入SQL后变成WHERE sa.id IN(1,10),完全符合语法要求。

方法2:使用参数化查询(更安全,防SQL注入)

如果你的开发工具/数据库驱动支持参数化查询,直接传入数组作为参数即可。大部分现代工具会自动把数组解析成IN子句需要的格式,无需手动拼接字符串,还能避免SQL注入风险。

方法3:在SQL中解析JSON字符串(不推荐,仅应急用)

如果无法修改JS代码,可以在SQL里把传入的JSON字符串转成整数列表。以PostgreSQL为例:

WHERE sa.id IN (
  SELECT CAST(json_array_elements_text('{{ testFetchID.value }}') AS INTEGER)
)

注意:这种方式存在SQL注入风险,仅当ID来源完全可信时使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:45:38