避免通过PHP在Mysql中重复

时间:2019-05-10 23:23:05

标签: 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");}
}
?>

3 个答案:

答案 0 :(得分:0)

如果插入查询返回选择查询返回的结果,则在插入查询周围添加if语句。使用xdebug也是一个好主意,它可以告诉您在运行代码时会发生什么。

答案 1 :(得分:0)

将插入查询部分保持在else条件下

答案 2 :(得分:0)

您可以为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"

注意,如果您的数据库已经有重复的值,则此方法将无效。

要了解这两个答案之间的区别,请查看this问题。