【发布时间】:2019-10-24 12:44:55
【问题描述】:
第二次编辑
问题是由低于我传递的整数值的 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 并只返回那个值吗?
【问题讨论】:
-
您的查询的参数顺序是
userID,其次是guildID,但您的函数以相反的顺序使用它们。这是故意的吗? -
看起来它正在截断 16 个字符,所以您可能遇到了一些 INTEGER 长度限制?
-
不是,但感谢您引起我的注意!
-
刚刚添加了第二个编辑。 :D
标签: javascript mysql node.js discord.js node-mysql