首页 > 解决方案 > D.JS MYSQL 行问题

问题描述

尝试将拉取的查询推送到 MessageEmbed 时遇到问题,它将 ID 推送得很好,但查询的所有其他部分都没有推送到消息并导致致命错误,不确定在多次搜索后继续修复它和试图解决它的视频。目标是当 -pulluser @user 运行时,它将用户 ID、XP、Perm 和 Rank 推送到消息嵌入。

这是代码:

const { MessageEmbed } = require(`discord.js`)
const reply = require(`../../settings/reply`)
const { createConnection } = require(`mysql`)
const mysql = require(`../../settings/mysql.js`)
const perms = require("../../settings/perms")

module.exports = {
    name: 'pulluser',
    callback: async (client, message, args) => {

        let member = message.guild.member(message.mentions.users.first() || message.guild.members.cache.get(args[0]))
      
        let con = createConnection(mysql.conInfo)

        con.query(`SELECT * FROM users WHERE ID = ${member.id}`, (err, rows) => {
            
            let di = rows[0].ID 
            let xp = rows[1].XP
            let prm = rows[2].Perm
            let rnk = rows[3].Rank
            
            
            
            const pUser = new MessageEmbed()
                .setTitle(`Pulled User ${member}`)
                .setColor("#ff1001")
                .setDescription(`USER INFO: ID: ${di}`)
                .addField(`EXP: ${xp}`)
                .addField(`PERMISSION LEVEL: ${prm}`)
                .addField(`RANK: ${rnk}`)
                .setFooter(reply.footer.foot)
            message.channel.send(pUser)
        })


    }
}

我得到的错误是 TypeError: Cannot read property 'XP' of undefined。它对 ID 之后的所有行请求执行此操作。不确定如何继续尝试让所有行都出现在消息中。

标签: javascriptmysqldiscord.js

解决方案


返回结果的变量rowArray。因此,如果您的数据库返回多个结果,那么您可以像row[0], row[2]...一样使用它row[99](取决于您的数据库返回的结果数量)。

在这种情况下,您会收到错误:

TypeError:无法读取未定义的属性“XP”

这意味着您的数据库没有返回足够的行以便您使用结果中的第二行或第三行。长话短说:

row[1], row[2],row[3]替换为row[0]

let di = rows[0].ID 
let xp = rows[0].XP
let prm = rows[0].Perm
let rnk = rows[0].Rank

为了了解发生了什么,我做了一个小演示。下面你会发现一个只有 1 个数组项,第二个演示将向你展示如果你的数组中有多个结果会发生什么。

const results = [
     {"ID": "1", "XP": "100", "Perm": 0, "Rank": "Rank 1"}
];
 
console.log(results[0].ID); // Returns "1"
console.log(results[1].XP); // Returns "undefined"
console.log(results[2].Perm); // Returns "undefined"
console.log(results[3].Rank); // Returns "undefined"

多行:

// Example with multiple rows

const results = [
     {"ID": "1", "XP": "100", "Perm": 1, "Rank": "Rank 1"},
     {"ID": "2", "XP": "110", "Perm": 2, "Rank": "Rank 2"},
     {"ID": "3", "XP": "120", "Perm": 3, "Rank": "Rank 3"},
     {"ID": "4", "XP": "130", "Perm": 3, "Rank": "Rank 4"}
];

console.log(results[0].ID); // Returns "1" (First item in 'results')
console.log(results[1].XP); // Returns "110" (Because this is the second array item in 'results')
console.log(results[2].Perm); // Returns "3"  (Because this is the third array item in 'results')
console.log(results[3].Rank); // Returns "Rank 4" (Because this is the forth array item in 'results')


推荐阅读