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

如何在PostgreSQL与Node.js中安全地向数组插入变量?

安全向PostgreSQL数组追加元素的正确参数化写法

你原来的写法直接把变量拼进SQL的数组字面量里,确实会面临SQL注入风险——要是有人构造恶意的newFriend值,很可能篡改你的SQL逻辑甚至破坏数据。

要实现安全的数组追加,有两种简单可靠的方式:

方法1:使用array_append函数

PostgreSQL自带专门的数组追加函数array_append,直接用它就能把单个元素安全加到数组末尾,参数化写法完全适配:

await pool.query(`UPDATE profiles SET friends = array_append(friends, $1)`, [newFriend]);

这个函数会自动处理元素的类型转换,不用你手动写'{"..."}'这种数组字符串,数据库会把$1当成纯值处理,彻底规避注入风险。

方法2:用数组拼接运算符||配合数组构造器

如果习惯用拼接运算符,需要把参数包装成单元素数组,用ARRAY[$1]构造:

await pool.query(`UPDATE profiles SET friends = friends || ARRAY[$1]`, [newFriend]);

这里ARRAY[$1]会把传入的newFriend转成单元素数组,再和原数组friends拼接,效果和追加一致,同样是安全的参数化写法。

你之前的写法失效,是因为||运算符要求两边都是数组类型,直接传单个值不符合语法要求,用上面两种方法就能解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 03:24:52