如何在查询函数中传递JSON并转义单引号
解决PostgreSQL中JSON字符串单引号转义问题
直接拼接SQL语句插入JSON是最容易触发转义问题的操作,还存在SQL注入风险,给你两种可行的解决办法:
1. 使用参数化查询(推荐)
这是最安全省心的方式,PostgreSQL客户端会自动处理JSON序列化和特殊字符转义,完全不用手动处理单引号:
const jsonData = { name: "John Doe", items: ["Don't", "Drink"] }; pgClient.query('INSERT INTO data VALUES($1, $2)', [83, jsonData]);
客户端会自动把jsonData转换成PostgreSQL可识别的JSON格式,同时妥善处理Don't里的单引号。
2. 手动构造JSON字符串(不推荐)
如果一定要手动编写JSON字符串,注意两个关键规则:
- SQL字符串内的单引号需要双写来转义(而非
\') - 替换代码里的HTML实体
"为真实的双引号"
修改后的代码示例:
pgClient.query(`INSERT INTO data VALUES(83, '{"name": "John Doe", "items": ["Don''t", "Drink"]}')`);
这里Don''t中的两个单引号是PostgreSQL认可的转义方式,能被正确解析为Don't。
内容的提问来源于stack exchange,提问作者notjordi
相关产品推荐
相关产品推荐

