【问题标题】:How can I avoid inserting DATE if the DATE is already exists in database to avoid duplicates?如果 DATE 已存在于数据库中以避免重复,如何避免插入 DATE?
【发布时间】:2019-03-27 03:46:12
【问题描述】:

我正在为我们的学校项目进行预订。如果数据库中已经存在值,我想确保mysqli 拒绝将reservationDate 插入数据库表"tbl_funeral" 中。问题是即使数据库中已经存在数据,也会插入数据。这段代码似乎不起作用,所以我想知道你们是否可以检查我的代码,看看我做错了什么?

<?php 
     $conn = new mysqli("localhost", "root", "", "parishdb");

    if(isset($_POST["btnSavess"])){
        $conn->query("INSERT IGNORE INTO tbl_funeral(FirstName, LastName, DateOfBirth, DateOfDeath, Address, ReservationDate, SelectTime) VALUES('$_POST[firstName]', '$_POST[lastName]', '$_POST[dob]', '$_POST[dod]', '$_POST[address]', '$_POST[reservationDate]','$_POST[selectTime]')");

        $result = mysqli_query($conn, $query);

         if ( mysqli_num_rows ($result) >= 1 ){
               echo "New record created successfully";
             } else {
               echo "data already exists";
            }
             mysqli_close($conn);
    }
?>

【问题讨论】:

    标签: php forms mysqli


    【解决方案1】:

    解决此问题的一种明智方法是在数据库级别处理它,并在 ReservationDate 列上添加唯一约束:

    ALTER TABLE tbl_funeral ADD CONSTRAINT date_cnstr UNIQUE (ReservationDate);
    

    有了这个约束,任何试图使用已经出现在表中的预订日期的插入都将在数据库本身上。

    您可以在 PHP 代码中使用类似于以下的模式:

    try {
        $conn = new mysqli("localhost", "root", "", "parishdb");
    
        if(isset($_POST["btnSavess"])) {
            $conn->query("INSERT IGNORE INTO tbl_funeral(FirstName, LastName, DateOfBirth, DateOfDeath, Address, ReservationDate, SelectTime) VALUES('$_POST[firstName]', '$_POST[lastName]', '$_POST[dob]', '$_POST[dod]', '$_POST[address]', '$_POST[reservationDate]','$_POST[selectTime]')");
    
            $result = mysqli_query($conn, $query);
            if ($query === FALSE) {
                throw new Exception($this->mysqli->error);
            }
    
            mysqli_close($conn);
        }
    
    } catch(Exception $e) {
        // ...
    }
    

    请注意,我看到您还没有使用准备好的语句。您应该考虑使用它们来避免 SQL 注入并使您的代码更具可读性。

    【讨论】:

    • 不需要加if语句?
    • @MomoyPH 我的建议是在 MySQL 内部处理这个问题。我不是 PHP 专家,但我尝试修改您的代码以处理违反唯一约束的情况。
    • 我应该把这个查询ALTER TABLE tbl_funeral ADD CONSTRAINT date_cnstr UNIQUE (ReservationDate);放在哪里?
    • @MomoyPH 如果可以的话,您可以直接从 MySQL 运行它。这是我建议您进行的永久性更改。
    • 抱歉,我不知道该怎么做。我只是 PHP 的初学者。我尝试了 try catch,但似乎根本不起作用继续插入相同的数据
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多