有没有办法使用php将csv导入MySQL?
我有一个ImportData.php
文件,其中包含以下代码,但不会产生错误消息。 ImportData.php
和abc.csv
位于Web服务器上的同一文件夹中,而MySQL位于另一台服务器上。
如果LOAD DATA LOCAL INFILE
不起作用,还有哪些方法可以导入php?我想用这个任务设置一个cronjob。
$sql = "LOAD DATA LOCAL INFILE 'abc.csv' INTO TABLE tbl_test
FIELDS TERMINATED BY ',' ENCLOSED BY '\"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES";
答案 0 :(得分:1)
与您的问题相关,我们很乐意为您解决问题:
<强> 1。加载数据信息
一个出色的MySQL功能,允许您在单个查询中直接导入CSV文件。
您正在寻找的SQL命令是LOAD DATA INFILE
此处的手册页:http://dev.mysql.com/doc/refman/5.1/en/load-data.html
快速举例:
LOAD DATA INFILE 'fileName'
INTO TABLE tableName
FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(
field1,
field2,
field3,
@variable1,
@variable2,
etc
)
set
(
field4 = concat(@variable1,@variable2)
);
这是一个相当基本的例子,但它涵盖了你想要的大部分内容。手册页提供了如何用它做一些非常复杂的东西的完整细节。
** 2。解析CSV并以编程方式插入**
set_time_limit(10000);
$con = new mysqli("example.com", "user", "password", "database");
if (mysqli_connect_errno()) {
trigger_error('Database connection failed: ' . mysqli_connect_error(), E_USER_ERROR);}
$fp = fopen("file.csv", "r");
while( !feof($fp) ) {
if( !$line = fgetcsv($fp, 1000, ';', '"')) {
continue;
}
$importSQL = "INSERT INTO table_name VALUES('".$line[0]."','".$line[1]."','".$line[2]."')";
$qry = $con->query(($importSQL) ;
if($qry === false) {
trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $con->error, E_USER_ ERROR);
}
}
fclose($fp);
希望有所帮助。
答案 1 :(得分:0)
LOCAL关键字会影响文件的预期位置和错误处理,如稍后所述。仅当您的服务器和客户端都已配置为允许时,LOCAL才有效。例如,如果mysqld以--local-infile = 0启动,则LOCAL不起作用。请参见第7.1.6节“Security Issues with LOAD DATA LOCAL”。
因此,如果允许,您必须首先检查您的MySQL配置。
替代方法可能是自己解析CSV文件,并使用INSERT INTO
语句逐行导入。
答案 2 :(得分:0)
确定。我按照你的代码来解析CSV并以编程方式插入它。有没有办法不导入第一行,因为它是字段标题?
非常感谢你。