【问题标题】:prevent insert data to database if specific atribute already exist如果特定属性已存在,则防止将数据插入数据库
【发布时间】:2016-09-28 11:11:39
【问题描述】:

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

我在数据库上有一个表 data,它具有属性 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 已存在,则防止向数据库插入数据

【问题讨论】:

  • 您可以在数据库中创建列unique
  • 如果他将其设为唯一并尝试按照所写的方式运行查询,则会出错。现在,也许这没问题,但更好的处理方法是不仅使列唯一,而且检查表中是否存在 data1,如果不存在,则运行插入查询。
  • 或者您可以按照火影忍者的建议进行操作,也可以使用未弃用的 mysql api 并将您的插入内容包装在 try/catch 块中。这样你就不需要做两次查询了。
  • 您好,感谢您的 cmets。你能给我代码怎么做吗?
  • @P.Gearman 如果出错,您只需捕获错误并处理它......就像迈克说的那样

标签: php mysql


【解决方案1】:

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

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 注入的影响,因此可以缓存查询计划。但那是另一回事了。

【讨论】:

    【解决方案2】:

    使列 data1 唯一

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

    像这样更改您的查询以在数据存在时忽略插入

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-24
      • 1970-01-01
      • 1970-01-01
      • 2016-03-20
      • 1970-01-01
      • 2020-06-17
      • 1970-01-01
      相关资源
      最近更新 更多