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

我在数据库中有一个表数据,这些数据具有属性dataid(自动增量作为主键),data1,data2。

我有一个简单的形式像这样

<h2>Enter your data</h2>
<form action="script.php" method="post">
    Data 1:<input type="text" name="data1" /></p>
    Data 2:<textarea name="data2"></textarea></p>
    <input type="submit" name="submit" value="Add Data" />
</form>


这是用于将数据插入数据库的script.php

<?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());
    }
?>


但是它将把表单中的所有数据插入数据库。
如果data1已经存在,如何防止将数据插入数据库?

最佳答案

解决您的问题的方法是使列唯一,以便数据库负责实施此约束。您可以通过创建唯一索引或约束来做到这一点:

alter table data add constraint unq_data_data1 unique (data1);


然后,可以使用inserton duplicate key update中使用此命令来忽略重复项:

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


ON DUPLICATE KEY部分实际上没有任何作用。这是没有操作的。

另外,您应该参数化查询,这样就不必进行SQL注入,因此可以缓存查询计划。但这是另一回事。

关于php - 如果特定属性已经存在,则防止将数据插入数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37528763/

10-11 03:15
查看更多