2011-10-29 156 views
2

假设我有一个名为“设备”表如下:PHP/MySQL的 - 检查插入新记录之前,是否有重复记录

device_id(field) 
123asf15fas 
456g4fd45ww 
7861fassd45 

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

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

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

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

感谢

UPDATE

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

回答

3

因为我深知你的问题,你有两条路走,这取决于你想如何做任务。

第一种方法 - >一个简单的查询可以从数据库表中返回device_id(存在或不存在)的布尔结果。如果是,那么不要INSERTREPLACE(如果你愿意)。

第二条路 - >您可以编辑表格的结构并确认device_id字段为UNIQUE字段。

将帖子

解释的第一种方式

查询您的表如下:

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' 
+0

你能解释更多的第二种方法吗?谢谢。 –

+0

@Charles是的,再看看我的答案,我已经编辑了它.. – B4NZ41

+0

它的工作原理,所以第二种方法是实现这个要求的最简单的方法。你能否在第一条路上解释我的学习情况?谢谢 –

1

最好的做法是使用尽可能少的SQL查询成为可能。你可以试试:

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

Source

+0

似乎不工作“替换”的语句,它仍然插入如果新纪录它有重复的记录,请检查我的更新。 –

相关问题