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

如何在Next.js中使用mysql2获取最后执行的SQL查询?

在Next.js中使用mysql2获取最后执行的查询

mysql2本身没有内置的getLastQuery()函数,但可以通过以下几种方式实现需求:

  • 自定义包装query方法
    自己封装数据库的query方法,每次执行时记录下最后执行的SQL语句和参数,之后就能随时获取:

    // 假设db是你用mysql2创建的连接或连接池实例
    let lastQuery = null;
    
    // 保存原query方法,再重新封装
    const originalQuery = db.query;
    db.query = async function(sql, params) {
      lastQuery = { sql, params };
      try {
        return await originalQuery.call(this, sql, params);
      } catch (err) {
        throw err;
      }
    };
    
    // 业务代码里使用
    try {
      const [rows] = await db.query('SELECT * FROM stores_new WHERE store_id = ?', [store_id]);
      console.log("Last Query:", lastQuery.sql, "Params:", lastQuery.params);
      return rows[0];
    } catch (error){
      console.error('Database error:', error);
      throw new Error('Failed to retrieve store info');
    }
    
  • 开启mysql2的debug日志
    在创建连接或连接池时开启debug选项,控制台会自动打印所有执行的查询细节,不用额外写代码:

    const mysql = require('mysql2/promise');
    
    const db = mysql.createPool({
      host: '你的数据库地址',
      user: '数据库用户名',
      password: '数据库密码',
      database: '目标数据库',
      debug: true // 开启后自动输出所有查询
    });
    
  • 报错时从错误对象获取
    如果查询执行失败,error对象里会包含sql字段,直接打印就能看到出错的查询:

    catch (error){
      console.error('Database error:', error);
      console.log('Failed Query:', error.sql); // 仅报错场景可用
      throw new Error('Failed to retrieve store info');
    }
    

内容的提问来源于stack exchange,提问作者Eldan Shkolnikov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:21:05