我有一个数组,其中包含来自txt文件的行,我需要将其插入到sql表中,但是24列中的4列(所有值/ t间隔)都是日期,但最后有时间等所有需要缩短15个字符,所以substr。
所以我尝试了很多方法来改变文件中的值然后插入它们,但它似乎不像我当前的代码那样工作:
$lines = file('F:/xamptest/htdocs/UniProject/upload/Amazon output.txt');
foreach($arr as $line)
{
$arr1 = explode("\t", $line);
$arr1[2] = substr($arr1[2], 0, -15);
$arr1[3] = substr($arr1[3], 0, -15);
$arr1[4] = substr($arr1[4], 0, -15);
$arr1[5] = substr($arr1[5], 0, -15);
$arri = implode("\t",$arr1);
file_put_contents('upload/ImportLine.txt', $arri);
mysql_query ("LOAD DATA INFILE 'F:/xamptest/htdocs/UniProject/upload/Amazon output.txt' INTO TABLE imported_orders FIELDS TERMINATED BY '\t'", $conn);
}
哪个应该改变行中的日期,将其保存到txt文件然后将其插入表中并循环每行。但所有这一切都是插入文件的最后一行,所以它循环,但然后只是覆盖自己。 或者我的方法太长,并且涉及到表和一个列出所有24个列和值的大量sql插入。
我的观点
所以我想知道我是否能以某种方式爆炸整个数组,其中包含来自日期的文件行和质量子数据集,然后将其恢复为旧的数组行格式,将其放回文件中并且只是LOAD DATA INFILE从那以后。由于加载原始文件有效,但日期不能作为日期类型,因为它们是“2013-03-11T20:35:33 + 00:00”。例如。
此外,如果有一种方法可以简单地插入一个变量,该变量作为/ t审议值而不必使其成为一个数组,并说明eachColumn = andValue [2]甚至更好。
非常感谢。
答案 0 :(得分:0)
也许将最后两行移到循环之外?
file_put_contents('upload/ImportLine.txt', $arri);
mysql_query ("LOAD DATA INFILE 'upload/ImportLine.txt' INTO TABLE imported_orders FIELDS TERMINATED BY '\t'", $conn);
您还需要更改此内容:
$arri = implode("\t",$arr1);
对此:
$arri[] = implode("\t",$arr1);
只是一个猜测,但也许: LOAD DATA INFILE'upload / ImportLine.txt'
答案 1 :(得分:0)
不要覆盖尝试使用:
file_put_contents('upload/ImportLine.txt', $arri, FILE_APPEND | LOCK_EX);