将整数传递给查询时,NodeJS MySQL返回空数组

时间:2019-06-10 05:27:24

标签: javascript mysql node.js discord.js node-mysql

第二编辑

问题是由MAX_INTEGER_VALUE引起的,该值低于我传递的整数值。我将MySQL表列更改为TEXT而不是BIGINT,所有内容均已正确返回。

感谢所有帮助!

编辑

因此,我刚刚意识到userID变量和guildID变量正在使用此代码行传递。

mysqlModule.userCrewSearch(575783451018526744, 282997056438665217);

但是,提供给SQL语句的值会将数字的最后两位数字变为'00'。因此,传递给SQL语句的值为575783451018526744,而不是575783451018526700

Edited Question Image

那么当我在代码中没有做任何事情来更改这些值时,为什么还要更改此值?

原始帖子

我会简短而甜美的。我正在尝试使用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);

我传递的两个值都是整数。但这就是我在控制台中得到的。

Broken Code

但是,这是我的代码,其中值硬编码到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);
        });
    });
}

这里是结果。

Working Code

奖励问题:如何处理RowDataPacket?是否可以将其直接转换为对象,以便调用results.crewID并仅返回该值?

2 个答案:

答案 0 :(得分:0)

几天前我遇到了同样的问题。我已经通过将参数转换为字符串解决了这一问题。

['रामको' 'कम्पनी']

答案 1 :(得分:0)

尝试在数字参数前添加+,它将转换为数字,对我有用-

connection.query(sql, [+guildID, +userID], function(err, results) {

对于奖励问题的答案,您可以使用

直接访问crewID或其他一些键
results[0].crewID

或执行类似操作-

const [ result ] = results;
console.log(result.crewID)