0

我有一个数组,其中包含来自 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 文件中,然后将其插入到表中并为每一行循环。但这所做的只是插入文件的最后一行,所以它循环通过但随后只是覆盖了自己。或者我的方法过于冗长,涉及到表格和大量的 sql 插入,列出所有 24 个列和值。

我的观点

所以我想知道我是否可以以某种方式从日期中分解包含文件行和质量 substr 的整个数组,然后将其恢复为旧的数组行格式,将其放回文件中,然后从中加载数据。由于加载原始文件有效,但日期不能作为日期类型,因为它们例如是“2013-03-11T20:35:33+00:00”。

此外,如果有一种方法可以简单地插入一个变量,该变量作为 /t 在内部考虑值,而不必将其设为数组并声明 eachColumn=andValue[2] 会更好。

非常感谢。

4

2 回答 2

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'

于 2013-10-22T16:57:30.367 回答
0

要不覆盖尝试使用:

file_put_contents('upload/ImportLine.txt', $arri, FILE_APPEND | LOCK_EX);
于 2013-10-22T16:59:28.580 回答