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

如何使用C#在MySQL数据库中创建用户输入名称的表

错误原因

MySQL中,单引号'仅用于包裹字符串类型的数值,表名属于SQL标识符,不能使用单引号包裹。你当前的代码用单引号包裹用户输入的表名,直接违反SQL语法规则,报错信息中提示的语法错误位置''test'就是单引号包裹的表名部分。
除此之外,直接拼接用户输入生成SQL语句存在极高的SQL注入风险,恶意用户可以构造特殊输入篡改SQL逻辑,造成数据泄露、数据丢失等严重安全问题。

解决方法
  • 替换表名的包裹符号:将包裹表名的单引号替换为MySQL专门用于包裹标识符的反引号`(键盘ESC键下方的按键),基础修改后的代码如下:
string createtable = $"CREATE TABLE `{email.Text}` (benutzung VARCHAR (20), passwort VARCHAR (30), id INTEGER);";
  • 增加表名校验逻辑:在拼接SQL前对用户输入的表名做合法性校验,限制仅允许使用字母、数字、下划线,长度不超过64位,同时排除MySQL保留关键字,避免特殊输入触发语法问题或注入风险。
  • 更安全的替代方案:不直接使用用户输入作为表名,新增一张元数据表存储用户输入和对应内部表名的映射关系,内部表名按固定规则生成,完全避免用户输入直接拼入SQL语句,从根源上规避注入风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:36:04