如何将Express.js变量传入MySQL查询并解决SQL语法报错问题
问题修复方案
1. 注册接口SQL语法错误
你触发报错的核心原因是插入语句的语法顺序错误,MySQL标准INSERT语句格式为:INSERT INTO 表名 (字段列表) VALUES (值列表),你把表名userinfo写到了字段括号的后面,直接触发语法解析错误。
修改db.js里的registrationQueryString即可:
// 修正前 // const registrationQueryString = "INSERT INTO (username, password) userinfo VALUES ( ?, ? )" // 修正后 const registrationQueryString = "INSERT INTO userinfo (username, password) VALUES ( ?, ? )"
2. 登录接口SQL冗余&语法问题
你的登录查询语句也存在语法问题和不必要的冗余逻辑:
- SELECT后指定字段不需要额外加括号
- 不需要套一层
EXISTS子查询,直接按条件匹配行即可,逻辑更清晰性能也更好 - 占位符
?外侧不需要加额外括号
修正后的loginQueryString如下:
// 修正前 // const loginQueryString = "SELECT (username, password) FROM userinfo WHERE EXISTS (SELECT (username, password) FROM userinfo WHERE username = (?) AND password = (?))" // 修正后 const loginQueryString = "SELECT username, password FROM userinfo WHERE username = ? AND password = ?"
可选优化建议
- 不要明文存储用户密码,推荐使用
bcrypt等加密库对密码做哈希处理后再存入数据库,避免数据泄露导致用户密码直接暴露 - 当前路由逻辑没有给客户端返回响应,数据库操作完成后无论成功失败都要返回对应的状态码和提示,否则请求会一直挂起直到超时
- 数据库操作的错误不要直接
throw err,建议捕获错误后返回前端友好提示,避免服务直接崩溃
内容的提问来源于stack exchange,提问作者user16789156
相关产品推荐
相关产品推荐

