使用ExpressJS与MySQL2开发API,如何统计MySQL查询结果条数?
首先注意你的代码有严重的SQL注入风险,绝对不能直接把用户输入拼接到SQL语句里,必须用mysql2的参数化查询来处理。
下面给你两种统计查询结果条数的实现方法:
方法1:让数据库直接返回统计数(效率更高)
直接修改SQL语句,用COUNT(*)统计符合条件的记录数,不需要查询全部字段,数据库处理更快,返回的数据量也更小:
app.get('/:token/checkUser/:username', function(req, res) { // 使用?作为占位符,避免SQL注入 db.query('SELECT COUNT(*) AS user_count FROM users WHERE user_username LIKE ?', [req.params.username], function(err, result) { if (err) { console.error(err); return res.status(500).send('服务器错误'); } // mysql2返回的result是数组,取第一个元素的user_count字段 const count = result[0].user_count; res.send({ userExists: count > 0, count: count }); }) })
方法2:查询全部结果后统计条数
如果你需要同时获取用户的详细数据,再统计条数,可以直接用返回结果数组的length属性:
app.get('/:token/checkUser/:username', function(req, res) { db.query('SELECT * FROM users WHERE user_username LIKE ?', [req.params.username], function(err, result) { if (err) { console.error(err); return res.status(500).send('服务器错误'); } // result是查询到的用户数组,length就是结果条数 const count = result.length; res.send({ userList: result, count: count }); }) })
补充说明:如果你的查询语句加了LIMIT限制返回条数,方法2的length是实际返回的条数,而方法1的COUNT(*)会返回符合条件的总记录数(不受LIMIT影响),可以根据你的需求选择。
内容的提问来源于stack exchange,提问作者ambroiselebs
相关产品推荐
相关产品推荐

