MySQL数据保存异常:API连接成功但无法写入数据库
数据库写入失败的问题排查与修复
核心问题点及修复方案
模板字符串语法错误
SQL语句里的&{content}是语法错误,正确写法应为${content}。这个错误会直接导致SQL语句无效,数据库无法执行写入操作。SQL注入风险与语法破坏
直接将变量拼接进SQL语句,不仅存在严重的SQL注入漏洞,当headline或content包含单引号、双引号等特殊字符时,还会直接破坏SQL语法结构,导致执行失败。必须改用参数化查询:let sql = 'INSERT INTO news (Headline, Content) VALUES (?, ?)'; con.query(sql, [headline, content], function(err, result){ // 后续处理逻辑 })数据库连接泄漏
每次请求创建新连接但未关闭,会导致数据库连接池耗尽,后续请求无法建立连接。需在查询完成后调用con.end()关闭连接,或改用连接池管理连接:con.query(sql, [headline, content], function(err, result){ // 无论成功失败都关闭连接 con.end(); if(err) return res.json({message: err}); res.json({message: 'news update saved'}); })请求体未解析
确保在路由定义前添加Express的JSON请求体解析中间件,否则req.body会是undefined,导致写入空值或报错:app.use(express.json());
修复后的完整代码示例
// 先配置请求体解析中间件 app.use(express.json()); app.post('/newsupdate', (req, res) => { let headline = req.body.headline; let content = req.body.content; let con = mysql.createConnection({ host: HOST, user: USERNAME, password: PASSWORD, database: DATABASE }); con.connect(function(err){ if(err) return res.json({message: err}); // 使用参数化查询 let sql = 'INSERT INTO news (Headline, Content) VALUES (?, ?)'; con.query(sql, [headline, content], function(err, result){ con.end(); if(err) return res.json({message: err}); res.json({message: 'news update saved'}); }) }) })
内容的提问来源于stack exchange,提问作者MixedByInstinct
相关产品推荐
相关产品推荐

