Как я могу избежать вставки DATE, если DATE уже существует в базе данных, чтобы избежать дублирования? - PullRequest
0 голосов
/ 23 октября 2018

Я забронировал номер для нашего школьного проекта.Я хочу убедиться, что 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);
    }
?>

1 Ответ

0 голосов
/ 23 октября 2018

Один разумный способ подойти к этому - это обработать его на уровне базы данных и добавить уникальное ограничение на столбец 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-кода и сделать ваш код более читабельным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...