Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 自动递增表导致重复条目';0';对于键';初级';_Php_Mysql_Database_Merge_Auto Increment - Fatal编程技术网

Php 自动递增表导致重复条目';0';对于键';初级';

Php 自动递增表导致重复条目';0';对于键';初级';,php,mysql,database,merge,auto-increment,Php,Mysql,Database,Merge,Auto Increment,我正在编写一个迁移脚本,它将两个计费系统合并为一个,将基本数据从远程数据库导入本地数据库。除此错误消息外,此操作运行良好。不幸的是,这导致了相当多的记录被错过 例如: ERROR: Duplicate entry '0' for key 'PRIMARY' INSERT INTO tblproductconfigoptionssub (`id`,`configid`,`optionname`,`sortorder`,`hidden`) values ('500349','500046','Cop

我正在编写一个迁移脚本,它将两个计费系统合并为一个,将基本数据从远程数据库导入本地数据库。除此错误消息外,此操作运行良好。不幸的是,这导致了相当多的记录被错过

例如:

ERROR: Duplicate entry '0' for key 'PRIMARY' INSERT INTO tblproductconfigoptionssub (`id`,`configid`,`optionname`,`sortorder`,`hidden`) values ('500349','500046','Coppermine','6','0')
代码:


对于许多行,我需要将ID增加一个单位值,这是WHMCS\u ID\u increment我到底做错了什么导致了这种情况?

Imo,您永远不应该在insert语句中设置
自动递增键
列。它可能会混淆数据库引擎,也可能混淆程序员。因此,当您查看
id
列时,请稍后删除“auto increment”属性并“replace”它,然后您可以将下一个可用值设置为字典中的正确值?这是完全有道理的,尽管您认为这实际上是导致此问题的原因吗?它似乎对大约95%的行有效,但我对剩余的5%得到了这个错误,为什么我认为这可能是其他原因。您可能有一个错误-要检测它,只需添加一个预插入触发器,检查是否传递零并报告列值。设置自动递增时修改id的另一个问题是,可能无法正确维护下一个要使用的值。在完成处理后将表更改为自动递增时,应自行设置id。在我看来,在insert语句中不应设置
自动递增键
列。它可能会混淆数据库引擎,也可能混淆程序员。因此,当您查看
id
列时,请稍后删除“auto increment”属性并“replace”它,然后您可以将下一个可用值设置为字典中的正确值?这是完全有道理的,尽管您认为这实际上是导致此问题的原因吗?它似乎对大约95%的行有效,但我对剩余的5%得到了这个错误,为什么我认为这可能是其他原因。您可能有一个错误-要检测它,只需添加一个预插入触发器,检查是否传递零并报告列值。设置自动递增时修改id的另一个问题是,可能无法正确维护下一个要使用的值。在完成处理后将表更改为自动递增时,应自行设置该id。
    $sql = "SELECT * FROM tblproductconfigoptionssub WHERE configid = '$configoptionid_old'";
    $res_configoptionssub = $db2->query($sql);

    while ($configoptionssub = $res_configoptionssub->fetch_array(MYSQLI_NUM))
    {
        $configoptionssub[0] = $configoptionssub[0] + WHMCS_ID_INCREMENT; // Auto Increment ID by flat value
        $configoptionssub[1] = $configoptionid_new;

        $configoptionsub_vals = implode("','", $configoptionssub);
        $configoptionsub_vals = "'" . $configoptionsub_vals . "'";

        $sql = "INSERT INTO tblproductconfigoptionssub ($col_configoptionssub) values ($configoptionsub_vals)";
        $db1->query($sql);