如何在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
相关产品推荐
相关产品推荐

