D.JS MYSQL 行问题

Posted

技术标签:

【中文标题】D.JS MYSQL 行问题【英文标题】:D.JS MYSQL Rows Issue 【发布时间】:2021-10-02 21:38:12 【问题描述】:

在尝试将拉取的查询推送到 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 之后的所有行请求执行此操作。不确定如何继续尝试让所有行都出现在消息中。

【问题讨论】:

不会 rows[1] 只是 rows[0],因为如果迭代器遍历所有行(同样适用于 2 和 3),则此块。因此rows 可能应该只是row 以便于阅读。免责声明,我根本不了解js。 【参考方案1】:

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

【讨论】:

以上是关于D.JS MYSQL 行问题的主要内容,如果未能解决你的问题,请参考以下文章

mysql 啥时候开启行级锁

问题总结问题行

mysql 行转列问题

MySQL 100万行查询速度

mysql总和,带有行ID

MYSQL命令行输入密码警告问题"mysql: [Warning]"解决