2013-10-31 121 views
0

有人能给我一些关于如何创建PHP脚本来将远程csv文件加载到mySQL表中的指针吗?将远程CSV导入到mySQL表中?

我已经在CSV和相关类型的字段中设置了mySQL表。

,我相信我可以用下面的,如果该文件是在本地系统上:

LOAD DATA INFILE 'data.txt' INTO TABLE db2.my_table; 

的端到端解决方案将是它有一个cronjob到凌晨4点每运行PHP脚本在Linux服务器早上。 CSV文件将位于需要登录凭证的SFTP共享中。不幸的是,它不能位于同一个盒子上。

考虑到下文西蒙斯评论,我现在正在努力得到它的本地导入:

$data = $conn->query('LOAD DATA INFILE ' .$filelocation. ' INTO TABLE wl_transactions FIELDS TERMINATED BY ";" IGNORE 1 LINES'); 
+0

这将是有帮助的:HTTP://www.johnboy.com/blog/tutorial-import-a-csv-file-using- php-and-mysql –

+0

我相信现在已经过时了,它不使用PDO,而且据我所知,LOAD DATA现在意味着你不必循环访问内容。 – Xeo

回答

1

如果你能写,从PHP MySQL服务器的本地文件系统,你可以使用PHP curl functions检索远程文件,然后将其保存到本地文件,最后触发LOAD DATA命令。

+0

会给它一个去看看。目前我的LOAD DATA代码有问题。更新的问题 – Xeo

+0

更新:你现在在挣扎着什么?查询对我来说看起来很好。你有没有看看MySQL手册中提到的安全需求? (运行'LOAD DATA INFILE'所需的特权,文件权限,'secure_file_priv'服务器变量? – Simon

0

这就是我在WordPress插件环境中工作的原因,希望它对您有所帮助。

我首先创建了一个表单,用户可以选择一个csv文件并选择其他设置。

这些设置是$这个 - > csv_settings阵列

if(isset($this->csv_settings['ignore'])): 
    $ignore = "IGNORE 1 LINES ({{The columns to ignore}})"; 
else: 
    $this->csv_settings['ignore'] = NULL; 
endif; 

/** @var wpdb $wpdb */ 
global $wpdb; 
$result = $wpdb->query($wpdb->prepare('load data local infile \'$this->path_to_file\' into table {{your table name}} fields terminated by \'' . $this->csv_settings['terminated'] . '\' enclosed by \'' . $this->csv_settings['enclosed'] . '\' lines terminated by \'' . $this->csv_settings['lines'] . '\' '. $ignore.';'));