如果key不存在,则发送null

时间:2015-09-06 11:16:11

标签: php mysql arrays codeigniter csv

我有csv文件解析数组并传递给mysql表。 一些CSV文件不包含数据库中的一些列,当我将其转换为数组时,我的表中列数较少,我得到“语法错误”。

来自控制器我打电话:

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?

1 个答案:

答案 0 :(得分:1)

要考虑的一个选择是不要编写较慢的PHP循环,而是利用LOAD DATA INFILE块中的灵活代码可能性,例如此答案链接here中的处理。功能,转换可能是无止境的。

也许六分之一,六分之一。但对于更简单的例程也很好,我建议快速数据摄取。

修改(根据以下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?如果是这样,那些补偿数据如何与其他数据的关系发挥作用?