【问题标题】:How to stop duplicate entries into database如何阻止重复条目进入数据库
【发布时间】:2013-03-10 14:11:46
【问题描述】:

您好,我正在尝试通过选择复选框将信息数组插入到数据库中的字段中,但我可以插入重复项,这不好我正在使用以下内容插入项目

    $list = $_POST['sub'];

    // for each loop to insert each value into the database with the selected users informtion
    foreach ($list as  $value)  {

        // The query to run
        $listQuery='INSERT INTO tbl_list (`userId`, `subId`) VALUES (\'' . $id . '\', \'' . $value . '\')';


        // Run the query
        $objects->query($listQuery);


    }

【问题讨论】:

    标签: php mysql loops insert duplicates


    【解决方案1】:

    你需要做两件事 首先创建您的 userId 主键,然后尝试此查询
    $listQuery='INSERT INTO tbl_list (userId, subId) VALUES (\'' . $id . '\', \'' . $value . '\') 重复键更新 userId = LAST_INSERT_ID()' ;

    【讨论】:

    • 这是一个连接表 - 将 userId 设为主键意味着用户只能拥有所有“列表”的一条记录
    • 但是chirs也想要同样的东西。他不想重复记录。
    • 这是一种可能性——但我对此表示怀疑。请参阅 OP 的 cmets 到其他答案。
    • 您好,更改表时收到此错误 #1062 - 键 'PRIMARY' 的重复条目 '0'
    • 如果表中已经有一些重复的条目,那么在创建主键时会出现同样的错误,所以你需要先删除重复的条目。
    【解决方案2】:

    您应该为 (userId, subId) 添加一个唯一键:

    ALTER TABLE tbl_list ADD UNIQUE(`userId`, `subId`)
    

    然后,您应该使用INSERT IGNOREREPLACE INTO 以避免插入过程中的错误。

    【讨论】:

    • 谢谢,这是让我卡了一段时间的解决方案,非常感谢您的帮助
    • @ChrisBench 很高兴为您提供帮助 :)
    • @ChrisBench in other comments 你已经指出你的表中有 3 个字段。如果您按原样使用此代码 - 您可能已将原始问题替换为不同的问题。这个答案完全回答了这个问题(顺便+1) - 但看起来“问题”不是你真正的问题。
    【解决方案3】:

    你可以在mysql查询中使用Insert Ignore代替Insert

    【讨论】:

      【解决方案4】:

      为了阻止重复的条目进入数据库,你必须做这件事。一步一步来

      > 1.set a unique key on the table
      
      after Complete create unique key you have to decide what you want to do when there's a duplicate
      
      > 2. ignore it
      
      > 3.Overwrite the previously entered record
      
      > Update some counter
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-29
        • 1970-01-01
        • 2020-02-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多