You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.js开发的机器人拉取MySQL数据发往Discord时显示undefined如何解决

问题原因&修复方案

1. SQL语法错误

你当前的SQL拼接逻辑没有给LIKE的匹配值加单引号,生成的SQL语句不符合MySQL语法规范,会直接触发查询错误,导致返回结果为undefined。
原拼接逻辑生成的错误SQL示例:
SELECT * from hatalar WHERE hata_komut LIKE %测试报错%
正确的SQL需要给匹配值加单引号,同时建议使用参数化查询避免SQL注入风险。

2. 未做错误捕获处理

query回调的第一个参数为错误对象,你没有判断错误是否存在,查询失败时直接使用结果对象自然拿到undefined。

3. 未正确读取查询结果

mysql模块的查询返回结果是数组格式,就算查询成功,直接打印整个数组也无法拿到你需要的报错解答内容,需要根据你表内的字段名读取对应值。

4. 缺少发送消息到Discord的逻辑

你当前仅把结果打印到服务端控制台,没有调用Discord.js的消息发送方法,用户在频道内自然收不到回复。


修正后的参考代码

const Discord = require("discord.js");
const client = new Discord.Client();
const ayarlar = require("./ayarlar.json");
const mysql = require('mysql');

var baglanti = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: '',
  database: 'hatabot'
});

baglanti.connect(function (err) {
  if (err) throw err;
  console.log("baglanti basarili")
  client.on('message', msg => {
    // 过滤机器人自己发的消息避免死循环
    if (msg.author.bot) return;
    // 使用参数化查询避免SQL注入,同时解决SQL语法问题
    const querySql = "SELECT * from hatalar WHERE hata_komut LIKE ?";
    const queryParam = `%${msg.content}%`;
    baglanti.query(querySql, queryParam, function(err, sonuc){
      // 先捕获查询错误
      if (err) {
        console.error('查询出错:', err);
        return msg.reply('查询报错信息失败,请稍后再试');
      }
      // 判断是否查到对应数据
      if (sonuc.length === 0) {
        return msg.reply('没有找到对应报错的解答信息');
      }
      // 读取第一条匹配结果的解答字段,注意把hata_icerik改成你实际表内存储解答的字段名
      const cevap = sonuc[0].hata_icerik;
      console.log(`${msg.content} kelimesine ait\n\n${cevap}\n\nsonucu bulundu`);
      // 发送结果到Discord频道
      msg.reply(cevap);
    });
  });
});

client.login(ayarlar.token)

内容的提问来源于stack exchange,提问作者FuhrXr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 08:45:05