我试图用php上传一个csv文件到我的mysql表。
我听说过inline
命令,但问题是csv日期格式为dd/mm/yyyy
且mysql格式为yyyy-mm-dd
。
我几乎尝试了每个Date
转换函数,但它没有成功。总是在Mysql表上看到PIX。
如何正确转换?
这是我尝试的最后一件事:
($date[0]
是csv中的日期单元格 - 26/05/2016
,而mysql中的第二列是日期)
while ($data = fgetcsv($handle, 1000, ","))
{
$date = strtotime($data[0]);
$newDate = date("d-m-Y", strtotime($data[0]));
$trydate = date("Y-m-d", strtotime($newDate));
echo $newDate . "<br>". $date. "<br>" . $data[0] . "<br>". $trydate. "<br>";
$import="INSERT INTO `testresult` (cityid, date, testnum,result) VALUES('$data[1]','$newDate','$data[3]','$data[2]')";
mysqli_query($con,$import) or die(mysql_error());
}
输出结果为:
01-01-1970
(blank)
26/05/2015
1970-01-01
答案 0 :(得分:2)
strtotime
等待输入expected格式。
您需要拆分字符串,并从中创建Y-m-d
fromat,或者您可以使用DateTime
对象。
$dateString = '11/05/2016';
$Date = DateTime::createFromFormat('d/m/Y', $dateString, new DateTimeZone(('UTC')));
echo $Date->format('Y-m-d');
<强>输出强>
2016-05-11
使用strtotime
$string = '26/05/2016';
$trydate = date("Y-m-d", strtotime(substr($string, -4) . "-" . substr($string, 3, 2) . "-" . substr($string, 0, 2)));
echo $trydate;
结果是一样的。
答案 1 :(得分:0)
您需要使用SET子句以及一个变量来引用该列中行的内容。在列列表中,将日期列分配给变量名称。然后,您可以在SET语句中使用它。
LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE testresult
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(cityid, @var1, testnum,result)
set dateOfBirth = STR_TO_DATE(@var1, '%d/%m/%y')
答案 2 :(得分:-1)
我认为您需要将/
转换为-
,以便strtotime了解格式..
例如
while(...) {
$date = date('Y-m-d', strtotime(str_replace('/', '-', $data[0])));
echo $date;
$import = "...";
}