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

如何编写代码避免MySQL插入姓名和手机号重复的参与者记录?

正确实现方案

你需要把查询条件里的邮箱匹配规则移除,仅保留姓名(姓、名、中间名)和手机号的匹配即可。另外你当前的SQL直接拼接用户输入存在严重的SQL注入风险,推荐使用参数化查询的写法,更安全可靠。

修正后的代码示例

// 预处理用户输入
string firstName = txtFName.Text.Trim();
string lastName = txtLName.Text.Trim();
string middleName = txtMName.Text.Trim();
string contactNo = txtContact.Text.Trim();

// SQL仅保留姓名和手机号的匹配条件,移除邮箱匹配逻辑
string checkRepeatSql = "SELECT COUNT(*) FROM participants_tbl WHERE firstname = @firstName AND lastname = @lastName AND middlename = @middleName AND contact_no = @contactNo";
command = new MySqlCommand(checkRepeatSql, con);

// 使用参数化查询避免SQL注入风险
command.Parameters.AddWithValue("@firstName", firstName);
command.Parameters.AddWithValue("@lastName", lastName);
command.Parameters.AddWithValue("@middleName", middleName);
command.Parameters.AddWithValue("@contactNo", contactNo);

// 判断是否存在重复记录
int repeatCount = Convert.ToInt32(command.ExecuteScalar());
if(repeatCount > 0)
{
    // 重复判定触发,执行禁止插入的业务逻辑即可
    MessageBox.Show("该姓名和手机号已存在报名记录,请勿重复提交");
    return;
}
// 无重复,后续执行正常的插入逻辑

规则说明

  • 原有代码将email字段加入了WHERE判断条件,导致只要邮箱不一致,就算姓名和手机号完全重复也会被判定为新记录,移除该条件后就符合你的业务需求:只要三段姓名+手机号匹配,不管提交的邮箱是什么,都会被判定为重复记录。
  • 参数化查询是数据库操作的标准规范,可避免恶意用户输入特殊SQL片段篡改、泄露你的数据库内容。

内容的提问来源于stack exchange,提问作者John Vince Andres

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:39:03