代码或csv的问题导致导入问题。任何可能与代码或csv有关的问题?
当我运行脚本时,我得到一个默认的messeage:CSV文件不可读
这适用于15个文件中的5个,无法看到明显的问题或解决方案。
http://www.dodgejeffgen.org/gs/issue1.csv
<?php
ini_set('auto_detect_line_endings',TRUE);
ini_set('post_max_size', '128M');
ini_set('upload_max_filesize', '128M');
function clean($link, $str, $default ='') {
if (!isset($str)) $str = $default;
$str = @trim($str);
if(get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
return mysqli_real_escape_string($link, $str);
}
$host_name = "some host";
$database = "some db";
$user_name = "some user";
$password = "some pass";
$connect = mysqli_connect($host_name, $user_name, $password, $database);
if (mysqli_connect_errno())
{ echo "Failed to connect to MySQL: " . mysqli_connect_error(); } else {}
$lines = $value1 = $value2 = $data = 0;
if ($_FILES["csv"]["size"] > 0) {
//get the csv file
$file = $_FILES["csv"]["tmp_name"];
$handle = fopen($file,"r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
//print_r($data).'<br />';
if ($data[0]) {
$sql = "INSERT INTO `articles` (`name`, `reference`) VALUES ('".clean($connect, $data[0])."','".clean($connect, $data[1])."')";
//echo $sql.'<br />';
if (mysqli_query($connect, $sql)) { } else { echo "Error: " . $sql . "<br>" . mysqli_error($connect); }
$lines++;
}
}
echo "<b>Your file has been imported.</b><br>";
echo "Found a total of ".$lines." records in this csv file.<br />";
} else { echo 'CSV File not readable.<br />';}
?>
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post" enctype="multipart/form-data" name="form1" id="form1">
Choose your file: <br />
<input name="csv" type="file" id="csv" />
<input type="submit" name="Submit" value="Submit" />
</form>
答案 0 :(得分:0)
我建议使用LOAD DATA LOCAL INFILE。只需将您的csv文件上传到服务器上的某个位置,然后运行以下mysql查询
LOAD DATA LOCAL INFILE '/path/to/csv_file.csv' INTO TABLE articles
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
(@col1,@col2) set `name`=TRIM(@col1),`reference`=TRIM(@col2)
答案 1 :(得分:0)
使用像Indra Kumar S推荐的LOAD DATA LOCAL INFILE
可能更好。您可以将其加载到临时表(CREATE TEMPORARY TABLE ...
)中,然后使用mysql查询将该数据分发到存储数据的任何永久表中。
除了FIELDS TERMINATED BY
和LINES TERMINATED BY
之外,还请注意FIELDS ESCAPED BY
以及其他选项。见这里:http://dev.mysql.com/doc/refman/5.7/en/load-data.html
首先加载到MySQL中的一个很酷的事情就是你可以使用MySQL,有时候在PHP的帮助下,进行大量的数据清理。 MySQL应该很好地修剪边缘,但你可能更喜欢选择PHP然后写回MySQL以进行更复杂的清理,比如删除不间断的空格,字符串中的额外空格或非ASCII字符。 / p>
当我做这样的事情时,我想我会通过CSV来确定每列的数据类型(varchar
,int
,decimal
,text
,datetime
),然后创建具有匹配数据类型的临时表,并为该表创建LOAD DATA INFILE
。