You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 18:10:48