Node.js向PostgreSQL执行INSERT查询时报语法错误如何解决
问题原因
- 你使用的PostgreSQL Node.js驱动
pg的参数占位符语法和MySQL存在差异:MySQL用?作为匿名参数占位符,而pg要求使用按顺序编号的占位符$n(n从1开始计数)。 - 直接复用MySQL教程的
VALUES(?,?,?,?)写法时,pg无法识别?字符,解析SQL过程中触发语法错误,你收到的错误码42601就是PostgreSQL官方定义的语法错误标识,和报错场景完全匹配。
修复方案
将插入SQL语句中的四个?按顺序替换为$1、$2、$3、$4即可,修改后的代码如下:
db.query( "INSERT INTO passwords (user_id, secure_password, iv, created_by) VALUES($1,$2,$3,$4);", [1058083062,hashedPassword.password, hashedPassword.iv, 1058083062], (err,result) => { if (err) { console.log(err); } else { res.send("Success"); } } )
注意事项
占位符编号和传入的参数数组顺序一一对应:数组第0位对应$1、第1位对应$2,以此类推,无需调整参数数组的原有顺序。
内容的提问来源于stack exchange,提问作者bored panda
相关产品推荐
相关产品推荐

