NodeJS MySQL возвращает пустой массив при передаче целых чисел в запрос - PullRequest
1 голос
/ 10 июня 2019

ВТОРОЕ РЕДАКТИРОВАНИЕ

Проблема была вызвана значением MAX_INTEGER_VALUE, которое меньше целочисленного значения, которое я передавал.Я изменил столбец таблицы MySQL на TEXT вместо BIGINT, и все возвращается правильно.

Спасибо за помощь!

РЕДАКТИРОВАТЬ

Итак, я только что понял, что переменная userID и переменные guildID передаются с использованием этой строки кода.

mysqlModule.userCrewSearch(575783451018526744, 282997056438665217);

Однако значения, которые передаютсяв операторе SQL переведите последние две цифры числа в '00'.Таким образом, вместо 575783451018526744 значение, передаваемое в оператор SQL, равно 575783451018526700.

Edited Question Image

Так почему же это значение изменяется, когда ничего не происходит?я делаю в моем коде меняются эти значения?

Исходное сообщение

Я буду держать это коротким и приятным.Я пытаюсь выполнить запрос, используя пакет MySQL nodejs.Я не уверен, где я ошибаюсь, но всякий раз, когда я вызываю свою функцию, которая выполняет мой запрос, я всегда возвращаю пустой массив, если я не жестко закодировал значения в запросе 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

BonusВопрос: Как мне обращаться с RowDataPacket?Могу ли я преобразовать это непосредственно в объект, чтобы я мог вызвать results.crewID и вернуть только это значение?

Ответы [ 2 ]

0 голосов
/ 10 июня 2019

Попробуйте добавить + перед вашим числовым параметром, он преобразуется в число, у меня это сработало -

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

для ответа на бонусные вопросы, вы можете напрямую получить доступ к идентификатору экипажа или другому ключу, используя

results[0].crewID

или сделать что-то вроде -

const [ result ] = results;
console.log(result.crewID)
0 голосов
/ 10 июня 2019

Та же проблема, с которой я столкнулся несколько дней назад. Я решил это путем преобразования параметров в строку.

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

       //  your code here 
}
...