MySQL2 使用ASYNC/AWAIT查询如何仅返回结果、不包含字段元数据
最优实现方案
你现有的写法已经通过解构赋值自动丢弃了第二个返回值(ColumnDefinition元数据部分),符合「不需要字段元数据」的需求,以下是更简洁无副作用的优化写法:
- 单语句直接解构写法
不用额外调用数组方法,一层解构丢元数据,二层解构直接拿LIMIT 1的单条结果:
const [[author]] = await connection.query(`SELECT * FROM authors where id = ? LIMIT 1`, [book.authorId]) return author
如果查询结果为空,author会是undefined,你可以根据业务需要加默认值,比如const [[author = null]] = ...
2. 通用封装写法(推荐)
如果项目中有大量LIMIT 1的查询,直接封装工具函数减少重复代码:
/** * 执行查询并返回单条结果 * @param {object} connection 数据库连接实例 * @param {string} sql 预编译SQL语句 * @param {array} params SQL占位符参数 * @returns {object|null} 单条查询结果,查不到返回null */ async function queryOne(connection, sql, params = []) { const [rows] = await connection.query(sql, params) return rows[0] ?? null } // 调用示例 const author = await queryOne(connection, 'SELECT * FROM authors where id = ? LIMIT 1', [book.authorId]) return author
注意事项
- 你原写法中直接拼接
id=${book.authorId}到SQL语句存在SQL注入风险,必须改用MySQL2支持的?占位符传参,数据库会自动处理参数转义。 - 不要使用
shift()方法取第一个元素:shift()会修改原数组产生不必要的副作用,性能也弱于直接取索引或解构的写法。
内容的提问来源于stack exchange,提问作者Paulo
相关产品推荐
相关产品推荐

