【发布时间】:2012-05-19 05:45:46
【问题描述】:
我正在尝试使用 fgetcsv 函数将 CSV 数据导入 MySQL 数据库。
if(isset($_POST['submit'])) {
$fname = $_FILES['sel_file']['name'];
$var = 'Invalid File';
$chk_ext = explode(".",$fname);
if(strtolower($chk_ext[1]) == "csv") {
$filename = $_FILES['sel_file']['tmp_name'];
$handle = fopen($filename, "r");
$res = mysql_query("SELECT * FROM vpireport");
$rows = mysql_num_rows($res);
if($rows>=0) {
mysql_query("DELETE FROM vpireport") or die(mysql_error());
for($i =1;($data = fgetcsv($handle, 10000, ",")) !== FALSE; $i++) {
if($i==1)
continue;
$sql = "INSERT into vpireport
(item_code,
company_id,
purchase,
purchase_value)
values
(".$data[0].",
".$data[1].",
".$data[2].",
".$data[3].")";
//echo "$sql";
mysql_query($sql) or die(mysql_error());
}
}
fclose($handle);
?>
<script language="javascript">
alert("Successfully Imported!");
</script>
<?
}
问题是它卡在导入过程之间并显示以下错误:
您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 在第 1 行的 'S',0,0)' 附近
每次只导入部分文件。 10000 行文件中仅导入 200-300 行。
这是我的表的 DDL:
create table vpireport (
id int not null auto_increment,
item_code int,
company_id int,
purchase double,
primary key(id),
foreign key(company_id) references users(userid)
);
到目前为止,我还没有找到问题所在,感谢任何帮助。谢谢。
【问题讨论】:
-
我认为它无法将逗号分隔的值与数据分开。你可以发布一个示例数据字段吗?
-
你能显示你的表格定义(DDL)吗?可能 $data wwas 没有正确转义。\
-
您的某个字段中似乎有一个
'。您应该始终对插入查询的字符串使用 mysql_real_escape_string。 -
stackoverflow.com/questions/4143938/… 您可以使用 pekka 在上述问题中回答的加载数据文件。加载数据文件语法:dev.mysql.com/doc/refman/5.1/en/load-data.html
-
嘿尼尔,我认为这个链接可能对你有帮助,它有明确的解释......blog.lysender.com/2009/04/importing-huge-csv-file-via-php