我有csv文件我解析数组和传递到mysql表。一些CSV文件不包含数据库中的一些列,当我将其转换为数组时,我有更少的列在表中,我得到"语法错误"。
从控制器i调用:
function sendHistoric(){
$this->load->model('Historic_model');
$this->load->library('csvreader');
foreach($this->divisions as $div){
$result = $this->csvreader->parse_file("assets/csv/1516{$div}.csv");//path to csv file
$this->Historic_model->loadCSVtoDB($result);
//var_dump($result);
}
}
在模型我有:
function loadCSVtoDB($data){
$sql = "call ins_historic(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
foreach($data as $row){
var_dump($row);
$this->db->query($sql,$row);
}
//echo $this->db->conn_id->error_message();
}
我是否可以以某种方式发送NULL,而不是他发现我有更少的数据,或者我需要检查数组的每个元素是否存在,如果不是设置为NULL ?
要考虑的一个选项不是编写较慢的PHP循环,而是在LOAD DATA INFILE
块中利用灵活的代码可能性,例如在这里的回答链接中看到的处理。可能的函数和转换是无穷无尽的。
可能是一个的6个,另一个的半打。但是对于更简单的例程也很好,我建议快速的数据摄取。
编辑:(基于下面的OP评论)
create table t62
( c1 int not null,
c2 varchar(10) not null,
c3 int not null,
c4 char(5) not null,
someOther int not null,
-- an addtion 57 columns here
primary key(c1,c2,c3,c4)
);
-- Mimic the LOAD DATA INFILE or PHP loop:
insert t62(c1,c2,c3,c4,someOther) values (1,'t',1,'01742',777);
insert t62(c1,c2,c3,c4,someOther) values (1,'t',1,'01742',777); -- error 1062: Dupe PK
insert t62(c1,c2,c3,c4,someOther) values (1,'t',2,'01742',777); -- happy
所以我不知道,你建议代码如何为你选择复合PK ?如果是这样,那么这些虚构的数据将如何处理与其他数据的关系呢?