如果已存在特定属性,则阻止将数据插入数据库

时间:2016-05-30 15:03:08

标签: php mysql

我想使用PHP防止表单中的重复值进入数据库表。

我在数据库上有一个表 data ,它有一个属性dataid(自动增量为主键),data1,data2。

我有一个像这样的简单表格

<?php
    if(isset($_POST['submit']))
    {
        //connect to the database
        $conn = mysql_connect('host', 'username', 'password', 'dbname') or die(mysql_error());

        //insert results from the form input
        $query = "INSERT INTO data(data1, data2) VALUES('$_POST[data1]', '$_POST[data2]')";

        $result = mysql_query($conn, $query) or die(mysql_error());
    }
?>

script.php 用于将数据插入数据库

Math.Round(value, 2, MidpointRounding.AwayFromZero)

但它会将表单中的任何数据插入数据库。 如果data1已经存在,如何阻止将数据插入数据库

2 个答案:

答案 0 :(得分:0)

您的问题的解决方案是使列唯一,以便数据库负责执行此约束。您可以通过创建唯一索引或约束来完成此操作:

alter table data add constraint unq_data_data1 unique (data1);

然后,您可以在insert中使用此功能,以使用on duplicate key update忽略重复项:

INSERT INTO data(data1, data2)
    VALUES('$_POST[data1]', '$_POST[data2]')
    ON DUPLICATE KEY UPDATE data1 = VALUES(data1);

ON DUPLICATE KEY部分并没有真正做任何事情。这是一个无操作。

此外,您应该参数化您的查询,这样您就不会受到SQL注入的影响,因此可以缓存查询计划。但那是另一回事。

答案 1 :(得分:0)

使列data1唯一

ALTER TABLE `data` ADD UNIQUE (`data1`);

更改您的查询,以便在数据存在时忽略插入

$query = "INSERT IGNORE INTO data(data1, data2) VALUES('$_POST[data1]', '$_POST[data2]')";