0

在插入重复项之前,我正在尝试检查表中是否已经存在 Id。

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

除了这个还有其他方法吗:

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

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

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

4

3 回答 3

4

两种策略:

  1. 让数据库做这个任务。更改您的表,以便您希望唯一的字段实际上是唯一索引。当您要插入数据并且它是重复的时,您将收到一个错误,可用于决定下一步做什么。ON DUPLICATE KEY或者,如果需要,您可以使用 an来代替执行另一个表操作。
  2. 查询表以查明 id 是否已存在。如果没有,请生成您的插入。

例子:

$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);

插入数据时,如果key已经存在,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 */
    }
}

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

于 2013-06-29T11:34:32.137 回答
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
    }
   }
?>

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

于 2013-06-29T11:32:21.960 回答
0

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

于 2013-06-29T11:38:50.173 回答