以下是在codeigniter中将csv数据上传到mysql的功能。问题是上传生日。在csv日期是2015年5月13日。上传日期字段后上传为null。其他领域还可以。我该如何解决呢?
function importcsv()
{
$data['addressbook'] = $this->csv_model->get_addressbook();
$data['error'] = ''; //initialize image upload error array to empty
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'csv';
$config['max_size'] = '1000';
$this->load->library('upload', $config);
// If upload failed, display error
if (!$this->upload->do_upload()) {
$data['error'] = $this->upload->display_errors();
$this->load->view('csvindex', $data);
}
else {
$file_data = $this->upload->data();
$file_path = './uploads/' . $file_data['file_name'];
if ($this->csvimport->get_array($file_path)) {
$csv_array = $this->csvimport->get_array($file_path);
foreach($csv_array as $row) {
$insert_data = array(
'firstname' => $row['firstname'],
'lastname' => $row['lastname'],
'birthday' => $row['birthday'],
'email' => $row['email'],
);
$this->csv_model->insert_csv($insert_data);
}
$this->session->set_flashdata('success', 'Csv Data Imported Succesfully');
redirect(base_url() . 'csv');
// echo "<pre>"; print_r($insert_data);
}
else $data['error'] = "Error occured";
$this->load->view('csvindex', $data);
}
}
答案 0 :(得分:4)
使用DateTime
对象进行日期转换,并且mysql本机数据类型需要日期为Y-m-d
格式。所以你需要添加这些
foreach ($csv_array as $row) {
$bday = DateTime::createFromFormat('d/n/Y',$row['birthday']);
$insert_data = array(
'firstname'=>$row['firstname'],
'lastname'=>$row['lastname'],
'birthday'=>$bday->format("Y-m-d"),
'email'=>$row['email'],
);
$this->csv_model->insert_csv($insert_data);
}
答案 1 :(得分:1)
将日期字符串转换为正确的格式并使用。
更改:
'birthday'=>$row['birthday'],
致:
'birthday'=>date_format(date_create_from_format('d/M/Y', $row['birthday']), 'Y-m-d') ),
请参阅文档:
答案 2 :(得分:0)
更改format
-
date
'birthday'=>date('Y-m-d', strtotime(str_replace('/', '.', $row['birthday'])))
数据库列的 Date
格式为YYYY-MM-DD
。而你正在通过dd/mm/yyyy
。