首页 > 解决方案 > 通过PHP避免Mysql中的重复

问题描述

我的数据库中有下表:

CREATE TABLE subjects (
  subject_id int(11) NOT NULL AUTO_INCREMENT,
  subject text,
  PRIMARY KEY (subject_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1;

我还从这个 PHP 插入表数据,它工作正常:

<?php
include('Conexion.php');
$subject = "";

if (isset($_POST['reg_subject'])) {
    $text = $_POST['text'];

        $query = "INSERT INTO subjects (subject) VALUES('$text')";
        mysqli_query($conn, $query); 
        header("Location: index.PHP");
}
?>

问题是用户可以输入重复的主题,我想避免这种情况。

如果主题已经存在,我试图显示一条警报消息,但它继续接受重复的主题。我怎样才能避免同名的重复主题?

这就是我的做法:

<?php
include('Conexion.php');

$subject = "";

if (isset($_POST['reg_subject'])) {
    $text = $_POST['text'];

 $subject_check_query = "SELECT * FROM subjects WHERE subject='$subject'";
$result = mysqli_query($conn, $subject_check_query);
$text = mysqli_fetch_assoc($result);
$message = "Already Exists";

if ($text) { // if subject exists
    if ($text['text'] === $subject) {
        echo "<script type='text/javascript'>alert('$message');</script>";
    }
}else{

        $query = "INSERT INTO subjects (subject) VALUES('$text')";
        mysqli_query($conn, $query); 
        header("Location: index.php");}
}
?>

标签: phpmysql

解决方案


您可以为列创建唯一索引subject_text

ALTER IGNORE TABLE subjects ADD UNIQUE (subject_text)

然后将您的查询更改为以下任一项:

"INSERT IGNORE INTO subjects (subject_text) VALUES('$text')"

或者:

"INSERT INTO subjects (subject_text) VALUES('$text')
ON DUPLICATE KEY UPDATE subject_text = subject_text"

请注意,如果您的数据库已经有重复值,这将不起作用。

有关这两个答案之间差异的解释,您可以查看问题。


推荐阅读