Node.js SQLite问题:console.log无法输出查询全部行
解决Node.js SQLite查询仅返回第一行数据的问题
你遇到的这个问题根源很明确:你用的sql.get()方法本身就是专门用来获取单条查询结果的——哪怕你的SQL语句匹配到了多条数据,它也只会返回第一行记录。要拿到表中所有的两行数据,你需要换成sql.all()方法。
具体解决方案
把原来的sql.get()替换为sql.all(),它会返回一个包含所有匹配行的数组,你可以通过遍历数组来获取每一行的userid:
// 替换get为all,获取所有结果行 sql.all(`SELECT * FROM '${message.guild.id}'`).then(rows => { // rows是存储所有查询结果的数组 rows.forEach(row => { console.log(row.userid); // 依次输出每一行的userid }); }).catch(err => { // 别忘了处理可能的错误 console.error('查询出错:', err); });
额外建议:避免SQL注入风险
直接把message.guild.id拼接到SQL语句里存在潜在的SQL注入风险(虽然Discord的服务器ID通常是安全的数字,但养成好习惯很重要)。建议使用参数化查询来替代字符串拼接:
sql.all(`SELECT * FROM ?`, [message.guild.id]).then(rows => { rows.forEach(row => console.log(row.userid)); }).catch(err => console.error('查询出错:', err));
补充说明
sql.get():适合你确定查询结果只有一条的场景,比如根据唯一ID查询单条记录,它会直接返回单个对象。sql.all():适合需要获取多条匹配记录的场景,返回一个包含所有结果对象的数组。
内容的提问来源于stack exchange,提问作者user9614296
相关产品推荐
相关产品推荐

