PHP实现Email已存在时不插入数据的问题求助
解决MySQL重复插入问题的方案
首先,你的ON DUPLICATE KEY UPDATE语句未生效的核心原因是**phone_number字段没有设置唯一约束**。MySQL的这个语法仅在插入行触发唯一键(主键或UNIQUE索引)冲突时才会执行更新操作,没有约束的话数据库无法识别“重复”数据。
步骤1:给字段添加唯一约束
先为employee表的phone_number字段添加UNIQUE索引,执行以下SQL:
ALTER TABLE employee ADD UNIQUE INDEX idx_phone_number (phone_number);
步骤2:修正插入语句并规避SQL注入风险
你当前直接将变量拼接进SQL的写法存在严重的SQL注入隐患,必须改用预处理语句。以下是两种常见PHP扩展的正确写法:
PDO写法
// 假设已建立PDO连接$pdo $sql = "INSERT INTO employee (phone_number) VALUES (:search) ON DUPLICATE KEY UPDATE phone_number = :search"; $stmt = $pdo->prepare($sql); $stmt->bindParam(':search', $search); $stmt->execute();
mysqli写法
// 假设已建立mysqli连接$conn $sql = "INSERT INTO employee (phone_number) VALUES (?) ON DUPLICATE KEY UPDATE phone_number = ?"; $stmt = $conn->prepare($sql); $stmt->bind_param("s", $search); $stmt->execute();
替代方案:仅忽略重复插入
如果不需要执行更新操作,只想跳过重复数据,可使用INSERT IGNORE(同样依赖唯一约束):
INSERT IGNORE INTO employee (phone_number) VALUES (:search);
注意:无论使用哪种语法,都必须用预处理语句避免SQL注入,禁止直接拼接变量。
内容的提问来源于stack exchange,提问作者Khai
相关产品推荐
相关产品推荐

