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

Node.js调用MySQL存储过程失败,报ER_PARSE_ERROR(1064)语法错误

解决Node.js调用MySQL存储过程的ER_PARSE_ERROR语法错误

嘿,我一眼就定位到你遇到的语法错误根源了:在MySQL中调用存储过程必须使用CALL关键字,你直接写存储过程名称会被当作普通SQL语句解析,自然触发ER_PARSE_ERROR错误。

问题代码的核心错误

你当前的调用方式:

connection.query('sp_LI_UploadData_Get', function (err, results, fields) { ... })

MySQL无法识别这是一个存储过程调用,会把它当成无效的SQL语句处理,这就是报错的直接原因。

修正后的完整代码示例

把SQL语句改成CALL sp_LI_UploadData_Get()(如果存储过程需要参数,就在括号里传入参数占位符并配合参数数组),同时完善错误处理逻辑(避免重复发送响应):

app.get('/pool', function (req, res) {
  pool.getConnection(function (err, connection) {
    if (err) {
      console.log("获取数据库连接失败:", err);
      return res.status(500).send("数据库连接失败");
    }
    console.log("成功获取数据库连接");
    
    // 关键修正:使用CALL关键字调用存储过程
    connection.query('CALL sp_LI_UploadData_Get()', function (err, results, fields) {
      // 无论成功失败,都要释放连接,避免连接池耗尽
      connection.release();
      
      if (err) {
        console.log("执行存储过程出错:", err);
        return res.status(400).send(err);
      }
      
      res.send(JSON.stringify(results));
    });
  });
});

额外注意事项

  • 如果你的存储过程需要传入参数,要使用参数占位符并传入参数数组,比如:
    // 假设存储过程需要两个参数:id和name
    connection.query('CALL sp_LI_UploadData_Get(?, ?)', [123, "test_data"], function (err, results) {
      // 处理逻辑
    });
    
  • 建议用try/catch/finally结构(或async/await语法)管理连接释放,确保即使发生错误也能归还连接:
    // 用async/await优化后的写法示例
    app.get('/pool', async function (req, res) {
      let connection;
      try {
        connection = await pool.getConnection();
        const [results] = await connection.query('CALL sp_LI_UploadData_Get()');
        res.send(JSON.stringify(results));
      } catch (err) {
        console.log("出错:", err);
        res.status(err.code === 'ER_PARSE_ERROR' ? 400 : 500).send(err);
      } finally {
        if (connection) connection.release();
      }
    });
    
  • 确认你的MySQL用户拥有执行该存储过程的权限,且存储过程确实存在于目标数据库中。

内容的提问来源于stack exchange,提问作者ganesan s

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:23:05