如果数据唯一,则将数据添加到数据库

时间:2014-03-20 23:26:12

标签: php mysql database pdo duplicates

这里我有一个用于INSERT数据到数据库的php PDO代码:

if ($_SERVER['REQUEST_METHOD'] == "POST") {

            try {        
                $DBH = new PDO($dsn, $user, $pass, $opt);
                $STH = $DBH->prepare("INSERT INTO track_aktivnosti (datum, id_akt, tabela, id_tabele, naziv) VALUES (:1,:2,:3,:4,:5)");

                $STH->bindParam(':1', $_POST['datum']);
                $STH->bindParam(':2', $_POST['id_akt']);
                $STH->bindParam(':3', $_POST['tabela']);
                $STH->bindParam(':4', $_POST['id_tabele']);
                $STH->bindParam(':5', $_POST['naziv']);

                $STH->execute();

            } catch (PDOException $e) {
                echo $e->getMessage();
            }
            echo "<p>Data submitted successfully</p>";

        }

我如何检查数据库中是否有数据要跳转到其他数据,以及数据在数据库中是否唯一以添加此数据?

我不想将重复数据添加到我的数据库中... 用php pdo可以吗?

1 个答案:

答案 0 :(得分:2)

执行此操作的正确方法是让数据库阻止重复数据进入。您可以使用唯一索引执行此操作。

假设“唯一”表示所有五列,则索引为:

create unique index track_aktivnosti_5cols on
    track_aktivnosti(datum, id_akt, tabela, id_tabele, naziv);

然后,当您尝试将数据插入已存在的表时,您将收到错误。如果您不想要错误,那么有两种简单的方法可以避免错误。更好的是:

INSERT INTO track_aktivnosti(datum, id_akt, tabela, id_tabele, naziv)
    VALUES (:1,:2,:3,:4,:5)
    ON DUPLICATE KEY UPDATE datum = VALUES(datum);

当遇到重复值时,这将执行冗余更新。这可以防止错误。另一种方法是:

INSERT IGNORE INTO track_aktivnosti(datum, id_akt, tabela, id_tabele, naziv)
    VALUES (:1,:2,:3,:4,:5);

这将在发生重复错误时忽略(插入不会发生)。但它也会忽略所有其他错误。