【问题标题】:NodeJS MySQL Returning Empty Array When Passing Integers To Query将整数传递给查询时,NodeJS MySQL返回空数组
【发布时间】: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


【解决方案1】:

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

function userCrewSearch(String(guildID), String(userID)) {

       //  your code here 
}

【讨论】:

【解决方案2】:

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

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

对于您的额外问题答案,您可以直接使用 crampID 或其他密钥访问,

results[0].crewID

或者做一些类似的事情 -

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

【讨论】:

猜你喜欢
  • 2019-02-05
  • 1970-01-01
  • 2015-11-26
  • 2020-05-22
  • 2018-04-06
  • 1970-01-01
  • 2021-05-17
  • 2018-03-14
  • 2014-07-25
相关资源
最近更新 更多