d.js mysql行问题

kpbpu008  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(271)

在尝试将拉式查询推送到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:无法读取未定义的属性“xp”。它对id之后的所有行请求执行此操作。不确定如何继续尝试将所有行都包含在消息中。

yxyvkwin

yxyvkwin1#

变量 row 返回结果的是一个数组。因此,如果您的数据库返回多个结果,那么您可以像这样使用它 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')

相关问题