Php 重复输入';制造商名称-0';对于键';初级';

Php 重复输入';制造商名称-0';对于键';初级';,php,mysql,database,codeigniter,Php,Mysql,Database,Codeigniter,我充其量只是一个中间人,非常感谢你的帮助。我试图上传csv文件与数据库的药物,制造商,通用名称等 我将其用于.php $this->db->insert('acc_coa',$manufacturer_coa'); } 对于数据库: 创建表格acc\u coa( HeadCodevarchar(50)校对utf8\u unicode\u ci非空, HeadNamevarchar(100)校对utf8\u unicode\u ci非空自动增量, PHeadNamevarchar(50)校对utf

我充其量只是一个中间人,非常感谢你的帮助。我试图上传csv文件与数据库的药物,制造商,通用名称等

我将其用于.php

$this->db->insert('acc_coa',$manufacturer_coa'); }

对于数据库:

创建表格
acc\u coa
(
HeadCode
varchar(50)校对utf8\u unicode\u ci非空,
HeadName
varchar(100)校对utf8\u unicode\u ci非空自动增量,
PHeadName
varchar(50)校对utf8\u unicode\u ci非空,
HeadLevel
int(11)不为空,
IsActive
tinyint(1)不为空,
IsTransaction
tinyint(1)不为空,
customer\u id
int(11)默认为空,
manufacturer\u id
int(11)默认为空,
IsGL
tinyint(1)不为空,
HeadType
char(1)校对utf8\u unicode\u ci不为空,
IsBudget
tinyint(1)不为空,
isdeprevation
tinyint(1)不为空,
折旧率
十进制(18,2)不为空,
CreateBy
varchar(50)校对utf8\u unicode\u ci非空,
CreateDate
datetime不为空,
UpdateBy
varchar(50)校对utf8\u unicode\u ci非空,
UpdateDate
datetime不为空, 主键(
HeadName
) )ENGINE=InnoDB默认字符集=utf8 COLLATE=utf8\U unicode\U ci

但只要我一试,我就会得到这个

错误号码:1062

键“PRIMARY”的重复条目“Manufacturer Name-0”

插入
acc\u coa
HeadCode
HeadName
PHeadName
HeadLevel
IsTransaction
IsGL
IsBudget
制造商id
IsDepreduction
折旧率
CreateBy
创建日期)值('502020000001','Manufacturer Name-0','Account Payment','3','1','1','0','L','0','0','0','0','1','2021-05-27 18:15:47')

文件名:C:/wamp64/www/efkwa/system/database/DB_driver.php


行号:691

是否已插入任何行?看起来主键值“制造商名称-0”已存在。 也许你的插入执行了两次

执行

DELETE FROM acc_coa;

然后再次尝试插入。

此错误表示您已输入具有该值(制造商名称-0)的示例/行,主键充当每个示例的唯一标识符,因此无法在表的其他示例/行中重复此错误。

已解决此问题

我删除了第691行

            // Display errors
            return $this->display_error(array('Error Number: '.$error['code'], `enter code here`$error['message'], $sql));

但是我想知道为什么?

您可以在MySQL客户端中执行以下操作:

创建数据并将其插入临时表或中间表:

CREATE TABLE acc_coa_tmp AS SELECT * FROM acc_coa WHERE 1 = 0;
注意:新表上没有主键
acc\u coa\u tmp

在PHP中:

try {
   :
   $db->insert(...);
} catch (SqlException $ex) {
   // Failed insert CSV
   // SQL insert into new table acc_coa_tmp
   $db->insert(...);
}

表中已存在头名为“Manufacturer Name-0”的行。
不能再插入一行此值。我尝试过,但在实时服务器上无效。通常,在真实编程世界中,删除/操作错误消息并不能修复错误。是的,我想。我仍在尝试找出原因。您可以阅读on:,这是一种值得追求的方法
try {
   :
   $db->insert(...);
} catch (SqlException $ex) {
   // Failed insert CSV
   // SQL insert into new table acc_coa_tmp
   $db->insert(...);
}