如何让mysql2的execute/query返回数组而非mysql.QueryResult
解决方案
先修复SQL注入风险
你的当前代码存在严重的SQL注入漏洞,直接把ids拼接进SQL语句的做法非常危险。应该改用参数化查询,mysql2会自动处理数组类型的参数:
const [results] = await connection.execute( `SELECT * FROM providers WHERE id IN (?)`, [ids] );
高效转换QueryResult为纯JS数组
mysql2的QueryResult是继承自Array的对象,本身已经包含了查询到的行数据,只是额外附带了fields、affectedRows等元数据属性。如果需要去掉这些额外属性得到纯数组,用以下任意一种高效方法即可,性能远优于JSON.parse(JSON.stringify()):
- 使用展开运算符:
const plainResults = [...results];
- 使用
Array.from:
const plainResults = Array.from(results);
- 使用数组的
slice方法:
const plainResults = results.slice();
默认情况下查询返回的行已经是普通JS对象,不需要额外转换;如果你配置了rowsAsArray: true,行数据会是数组格式,可根据需求调整。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

