第二次编辑
问题是由 MAX_INTEGER_VALUE 引起的,它低于我传递的整数值。我将 MySQL 表列更改为 TEXT
而不是 BIGINT
并且所有内容都被正确返回。
感谢大家的帮助!
编辑
所以我才意识到 userID
变量和 guildID
变量是使用这行代码传递的。
mysqlModule.userCrewSearch(575783451018526744, 282997056438665217);
但是,提供给 SQL 语句的值会将数字的最后两位数字变为“00”。因此,传递给 SQL 语句的值不是 575783451018526744
而是 575783451018526700
。
那么,当我在代码中所做的任何事情都没有改变这些值时,为什么这个值被改变了?
原帖
我会保持简短和甜蜜。我正在尝试使用 nodejs MySQL 包运行查询。我不确定哪里出错了,但每当我调用执行查询的函数时,我总是返回一个空数组,除非我将值硬编码到 SQL 查询中。
代码如下:
// Search for the User's Crew
function userCrewSearch(guildID, userID) {
pool.getConnection(function(err, connection) {
if(err) {
return console.log(err);
}
var sql = "SELECT * FROM `crew-members` WHERE `userID`=? AND `guildID`=?;";
console.log(sql);
connection.query(sql, [guildID, userID], function(err, results) {
connection.release(); // always put connection back in pool after last query
if(err) {
return console.log(err);
}
return console.log(results);
});
});
}
我这样调用这个函数:userCrewSearch(575783451018526744, 282997056438665217);
我传递的两个值都是整数。然而,这就是我在控制台中得到的。
但是,这是我的代码,其中的值被硬编码到 SQL 中...然后代码以 RowDataPacket 的形式返回结果。
// Search for the User's Crew
function userCrewSearch(guildID, userID) {
pool.getConnection(function(err, connection) {
if(err) {
return console.log(err);
}
var sql = "SELECT * FROM `crew-members` WHERE `userID`=282997056438665217 AND `guildID`=575783451018526744;";
console.log(sql);
connection.query(sql, [guildID, userID], function(err, results) {
connection.release(); // always put connection back in pool after last query
if(err) {
return console.log(err);
}
return console.log(results);
});
});
}
这是结果。
奖励问题:我如何处理 RowDataPacket?我能否将其直接转换为对象,以便调用 results.crewID
并仅返回该值?
最佳答案
几天前我遇到了同样的问题。我通过将参数转换为字符串解决了这个问题。
function userCrewSearch(String(guildID), String(userID)) {
// your code here
}
关于javascript - 将整数传递给查询时,NodeJS MySQL 返回空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56520919/