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

Python从SQL表取信息及Discord ID匹配SQL数据问题排查

Discord用户ID与SQL数据库匹配问题修复

问题说明

我需要将Discord用户ID与SQL数据库中的记录匹配:

  • 若ID存在,打印insert_time、platform、gamertag、kills、downs、kdRatio字段值
  • 若ID不存在,输出你未注册

当前代码会打印数据库内所有ID,不符合需求。

原代码问题分析

  1. SQL注入风险+类型不匹配:用f-string直接拼接SQL语句,不仅有安全隐患,还可能因Discord ID的类型差异(数据库中为字符串,代码中为整数)导致WHERE条件失效,返回所有行。
  2. 逻辑冗余且错误:查询已通过WHERE筛选匹配ID,循环内再判断row[0] == ctx.author.id完全多余;同时未处理查询结果为空的情况,无法输出未注册提示。
  3. 输出逻辑混乱:循环内每一行都打印ID,且错误触发else分支。

修正后的代码

print(logTime, ">", ctx.author.name, ">", "Me command starting here...")
import mysql.connector

mydb = mysql.connector.connect(
    host=SQL_HOST,
    user=SQL_USER,
    password=SQL_PASSWORD,
    database=SQL_DATABASE
)

# 使用参数化查询,避免注入并保证类型匹配
sql_select_query_register = "SELECT * FROM data WHERE discord_id = %s"
mycursor = mydb.cursor()
# 传入参数时转成字符串,匹配数据库字段类型
mycursor.execute(sql_select_query_register, (str(ctx.author.id),))
records = mycursor.fetchall()

if not records:
    print("你未注册")
else:
    # discord_id是主键,最多返回一条记录
    row = records[0]
    print(row[0])  # 打印匹配的discord_id
    # 按需求打印指定字段
    print(f"{row[1]}, {row[2]}, {row[3]}, {row[4]}, {row[5]}, {row[6]}")

mycursor.close()
mydb.close()

验证结果

原实际输出

30.10.2022 14:08:37 > jcK. > Me command starting here...
176432554692313087

you are not registered
176432554692313088
you are not registered

修正后期望输出

30.10.2022 13:34:22 > jcK. > Me command starting here...
176432554692313088
30.10.22 13:14:53, acti, jcK_#2039728, 8840.0, 8672.0, 1.4203084832904884

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 23:26:05