经过一番搜索,我找到了一些帮助,如何使用PHP将CSV文件导入MYSQL表。
一切正常,直到(在我看来)当我想在我的代码中分成几行时出错。
这里有你到目前为止的代码:
$databasetable = "articles";
$fieldseparator = "|";
$lineseparator = "\n";
$csvfile = "ARTICLES.CSV";
if(!file_exists($csvfile)) {
echo "File not found. Make sure you specified the correct path.\n";
exit;
}
$file = fopen($csvfile,"r");
if(!$file) {
echo "Error opening data file.\n";
exit;
}
$size = filesize($csvfile);
if(!$size) {
echo "File is empty.\n";
exit;
}
$csvcontent = fread($file,$size);
fclose($file);
require('includes/incl/conn.inc.php');
$lines = 0;
$queries = "";
$linearray = array();
foreach(split($lineseparator,$csvcontent) as $line) {
$lines++;
$line = trim($line," \t");
$line = str_replace("\r","",$line);
$linearray = explode($fieldseparator,$line);
$linemysql = implode("','",$linearray);
$upload_article_query = "INSERT INTO $databasetable VALUES ($linemysql)";
$upload_article_stmt = $dbh->prepare($upload_article_query);
$upload_article_stmt->execute;
我的CSV看起来像是这样,有大约5700行文章(新行上的每篇文章和字段都以“|”分开
16158|-H|Factory installed heater|10|S|400|CCTV|45.0|E| 1829|Factory installed heater|Factory installed heater
16159|-IR|Factory installed IR LED ring|10|S|400|CCTV|50.0|E| 1829|Factory installed IR LED ring|Factory installed IR LED ring
在我的表中包含12个列,其中必须导入此数据。
我感觉问题出在我的foreach(split())上,因为如果我执行$ linearray的print_r,我只有一个数组用于所有键。
如果我执行$ linemysql的var_dump,我会得到一个包含所有内容的“字符串(2228255)”。
这是我第一次这样做,也许我的代码遗漏了一些东西。谁能帮我这个?