Node.js拼接MySQL插入语句报ER_PARSE_ERROR语法错误问题咨询
问题根因
- MySQL要求插入的字符串类型字段值必须用引号包裹,你当前的代码直接拼接字符串类型的用户名、邮箱、密码,最终生成的SQL没有给值加引号,导致语法解析报错
ER_PARSE_ERROR - 手动拼接SQL的方式存在极高的SQL注入风险,属于不安全的编码方式,不建议使用
修复方案
直接使用Node.js MySQL模块自带的占位符?能力,模块会自动处理值的转义、引号包裹逻辑,完全规避语法问题和注入风险,修复后代码如下:
let sql2 = 'insert into users (username,email,password) values (?,?,?)' // 第二个参数传入和占位符顺序对应的参数数组即可 db.query(sql2, [user.username, user.email, user.password], (err, result) => { if(err) throw err res.send('User registriation done') })
如果你一定要手动拼接SQL(仅做原理演示,生产环境严禁使用),需要手动给每个字符串值外侧加单引号,同时转义内容中的特殊字符,写法参考:
let sql2 = 'insert into users (username,email,password) values (\'' + user.username + '\',\'' + user.email + '\',\'' + user.password + '\')'
内容的提问来源于stack exchange,提问作者amro3
相关产品推荐
相关产品推荐

