PHP / MYSQL - 在插入新记录之前检查它是否有重复记录

时间:2011-10-29 01:22:53

标签: php mysql

假设我有一个名为“device”的表格如下:

device_id(field)
123asf15fas
456g4fd45ww
7861fassd45

我想使用下面的代码插入新记录:

...
$q = "INSERT INTO $database.$table `device_id` VALUES $device_id";
$result = mysql_query($q);
...

我不想插入数据库表中已存在的记录,那么在插入新记录之前如何检查它是否有重复记录?

我应该修改MYSQL语句还是PHP代码?

由于

更新

<?php
    // YOUR MYSQL DATABASE CONNECTION
    $hostname = 'localhost';
    $username = 'root';
    $password = '';

    $database = 'device';
    $table = 'device_id';
    $db_link = mysql_connect($hostname, $username, $password);
    mysql_select_db( $database ) or die('ConnectToMySQL: Could not select database: ' . $database );
    //$result = ini_set ( 'mysql.connect_timeout' , '60' );

    $device_id = $_GET["device_id"];
    $q = "REPLACE INTO $database.$table (`device_id`) VALUES ($device_id)";
    $result = mysql_query($q);
    if (!$result) {
        die('Invalid query: ' . mysql_error());
    }
?>

2 个答案:

答案 0 :(得分:3)

由于我很清楚你的问题,你有两种方法可去,这取决于你希望如何完成任务。

第一种方式 - &gt;一个简单的查询可以从数据库表中的device_id(存在或不存在)中返回一个布尔结果。如果是,则不要INSERTREPLACE(如果您愿意)。

第二种方式 - &gt;您可以修改表格的结构,并确保字段device_idUNIQUE字段。

<强> [EDITED]

解释第一种方式

查询您的表格如下:

SELECT * FROM `your_table` WHERE `device_id`='123asf15fas'

然后如果你得到了结果,那么你已经将数据存储在你的表中,那么结果是1,否则就是0

在原始php中它看起来像:

$result = mysql_query("SELECT * FROM `your_table` WHERE `device_id`='123asf15fas'");
if (!$result)
{
   // your code INSERT
   $result = mysql_query("INSERT INTO $database.$table `device_id` VALUES $device_id");
}

解释第二种方式

如果您的表尚未填充,您可以为表创建索引,例如转到SQL命令行或DBMS并对表执行以下命令:

ALTER TABLE `your_table` ADD UNIQUE (`device_id`)

警告:如果已经填充并且该字段上有一些相同的数据,则不会创建索引。

使用索引,当有人尝试插入相同的ID时,会收到错误消息,如下所示:

#1062 - Duplicate entry '1' for key 'PRIMARY' 

答案 1 :(得分:1)

最佳做法是尽可能少地使用SQL查询。你可以尝试:

REPLACE INTO $database.$table SET device_id = $device_id;

Source