【问题标题】:PHP/MYSQL - Check whether it have duplicated record before inserting new recordPHP/MYSQL - 在插入新记录之前检查它是否有重复记录
【发布时间】:2016-11-17 22:06:15
【问题描述】:

假设我有一个名为“设备”的表,如下所示:

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

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    由于我很好地理解了您的问题,因此您有两条路可以走,这取决于您希望如何完成任务。

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

    第二种方式 -> 您可以编辑表格的结构并确认字段device_idUNIQUE 字段。

    [已编辑]

    解释第一种方式

    按如下方式查询您的表:

    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' 
    

    【讨论】:

    • 你能解释一下第二种方式吗?谢谢。
    • @Charles 当然可以,再看一次我的答案,我已经编辑过了..
    • 它可以工作,所以第二种方法是实现需求的最简单方法。您能否进一步解释一下我的学习的第一种方式?谢谢
    • @Charles 很好用!当然,我也会解释第一种方式。我将再次编辑答案。
    • 请注意,您可能希望使用INSERT IGNORE 向任何阅读您的代码的人表明您知道可能已经存在带有密钥的记录。
    【解决方案2】:

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

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

    Source

    【讨论】:

    • “REPLACE”语句好像不行,如果有重复记录,它仍然插入新记录,请检查我的更新。
    猜你喜欢
    • 2012-03-06
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多