【问题标题】:Check if a uuid (in the database) exists检查 uuid(在数据库中)是否存在
【发布时间】:2019-07-10 08:41:47
【问题描述】:

如何检查 MySQL 数据库中是否存在数据?我已经设法获取数据,但我只想知道如何做:如果此数据不存在。

我当前的代码:

connection.query(`select builduhcelo from practiceplayers where uuid = '${uuid}'`, function (errbu, resultbu) {
    if(errbu) throw errbu;
    connection.query(`select nodebuffelo from practiceplayers where uuid = '${uuid}'`, function (errnd, resultnd) {
        if(errnd) throw errnd;
        connection.query(`select ironbuilduhcelo from practiceplayers where uuid = '${uuid}'`, function (erribu, resultibu) {
            if(erribu) throw erribu;
            let embed = new Discord.RichEmbed()
                .setAuthor(`Elorion.net`, `https://image.noelshack.com/fichiers/2019/06/7/1549795460-logo-elorionnetwork.png`)
                .setColor(color.elorion)
                .addField("Username", username)
                .addField("UUID", uuid)
                .addField("BuildUHC Elo", resultbu[0].builduhcelo)
                .addField("NoDebuff Elo", resultnd[0].nodebuffelo)
                .addField("IronBuildUHC Elo", resultibu[0].ironbuilduhcelo)
                .addField("Skin", `[Download](https://crafatar.com/skins/${uuid}.png)`)
                .setThumbnail(`https://crafatar.com/avatars/${uuid}.png?size=400&overlay=true`)
                .setFooter(`Ⓒ Elorion.net 2019. All rights reserved`);
            message.channel.send(embed)
        })
    })
})

当数据库中不存在 uuid 时,我收到此错误:

throw err; // Rethrow non-MySQL errors 
^ 

TypeError: Cannot read property 'builduhcelo' of undefined 

【问题讨论】:

  • 您的查询字符串有不平衡的反抽动、引号、大括号和圆括号。
  • @trincot 我想这些是拼写错误,因为 OP 声称已设法获取数据。
  • @jom,让 OP 更正它会更好,这样可以确保他们的代码也是如此。
  • "select builduhcelo from practiceplayers where uuid = '${uuid}'",`
  • 我应该重新打开它@trincot。那个 Dup 是不是有点太明显了?

标签: javascript mysql discord.js


【解决方案1】:

问题是您引用 resultbu[0]resultbu 将(有时)是一个空数组,所以 resultbu[0].builduhcelo 是不可能的并触发错误。

其次,您正在嵌套本可以一次性完成的查询。选择 SQL 查询中的所有三列。

最后添加if条件,验证result数组不为空:

connection.query(`select builduhcelo, nodebuffelo, ironbuilduhcelo 
                  from practiceplayers 
                  where uuid = '${uuid}'`, function (err, result) {
    if (err) throw errbu;
    if (result.length) { /* Only execute the rest when there is a match: */
        let embed = new Discord.RichEmbed()
            .setAuthor(`Elorion.net`, `https://image.noelshack.com/fichiers/2019/06/7/1549795460-logo-elorionnetwork.png`)
            .setColor(color.elorion)
            .addField("Username", username)
            .addField("UUID", uuid)
            .addField("BuildUHC Elo", result[0].builduhcelo)
            .addField("NoDebuff Elo", result[0].nodebuffelo)
            .addField("IronBuildUHC Elo", result[0].ironbuilduhcelo)
            .addField("Skin", `[Download](https://crafatar.com/skins/${uuid}.png)`)
            .setThumbnail(`https://crafatar.com/avatars/${uuid}.png?size=400&overlay=true`)
            .setFooter(`Ⓒ Elorion.net 2019. All rights reserved`);
        message.channel.send(embed)
    }
})

【讨论】:

  • 非常非常感谢。我在做测试的时候已经接近目标了,我只是不知道把它放在哪里:if (result.length)
  • 这是一个新问题,也进入了不同的技术(非SQL)。你能问这个作为一个新问题吗?如果你很好地制定它并正确标记它,它很快就会吸引合适的观众。
  • 您好,我最近改用了mongoDB,请问如何通过mongoose来实现呢?我的文档:prntscr.com/mn9fqt 给您带来的不便,请见谅,先谢谢您了 真诚的
  • 好的没问题 trincot
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-22
  • 2012-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
相关资源
最近更新 更多