如何检查一个值是否已存在以避免重复?如果存在则不执行任何操作,否则将记录插入数据库

时间:2013-06-29 11:30:10

标签: php mysql

在插入副本之前,我正在尝试检查表中是否已存在Id。

所以我需要检查数据库表中是否存在Id,如果存在则不执行任何操作,否则我想将记录插入表中。我怎样才能做到这一点?

除此之外还有其他方式:

Sql_query->Select id from table where key="something";

If(true) 
{
  do nothing;
}
else
{
  Insert record in database;
}

我想避免这种情况,因为它需要时间来搜索整个表然后插入。那么有什么可行的方法吗?

3 个答案:

答案 0 :(得分:4)

两种策略:

  1. 让数据库执行此任务。改变你的表格,使你想要独特的字段实际上是unique index。如果要插入数据并且它是重复的,您将收到一个错误,可用于确定下一步该做什么。或者,如果您想要执行另一个表操作,则可以使用ON DUPLICATE KEY(如果需要)。
  2. 查询表格以查明是否已存在ID。如果没有,请生成插入。
  3. 示例:

    $mysqli = new mysqli("localhost", "my_user", "my_password", "world");
    $result = $mysqli->query("SELECT id FROM yourtable");
    if ($result->num_rows > 0) {
        /* do your insert */
    }
    $result->close();
    

    我更喜欢让数据库完成这项工作。

    更新

    根据请求,这里有两个关于如何向表添加唯一索引的示例。 SQL看起来像这样:

    CREATE UNIQUE INDEX your index_name
    ON your_table (your_id_field);
    

    插入数据时,如果密钥已存在,mysql将抛出错误。要处理此错误,请执行以下操作:

    $SQL = 'INSERT INTO yourtable (yourfield1, yourfield2) 
            VALUES ( 1, "Hello")';    
    $result = $mysqli->query($SQL);
    
    if (!mysqli_query($link, $SQL)) {
        if(mysqli_errno($link) == 1062) {
             /* duplicate ... whatever you want in this case */
        }
    }
    

    如果您在这种情况下不想做任何事情,那么您不需要所有这些错误处理。

答案 1 :(得分:2)

您可以使用以下代码执行此操作:

<?php
   if($stmt = $db->prepare("SELECT * FROM tablename WHERE id=?")){
    $stmt->bind_param('i', $id);
    $stmt->execute();
    $stmt->store_result();

    if($stmt->num_rows == 0){
      // CREATE RECORD
    }
   }
?>

您只需要在表中搜索并检查查询是否返回

答案 2 :(得分:0)

在列上创建唯一索引(如果未检查主键),并在creatin SQL查询时使用ON DUPLICATE。更多相关信息:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html