迭代文件夹中的CSV文件,并使用PHP将数据加载到MySQL中

时间:2013-04-11 18:58:23

标签: php mysql sql

我使用以下代码遍历文件夹中的文件并将数据加载到MYSQL表中。我无法完成这项工作。有没有更好的解决方案?

if ($handle = opendir('C:\Documents and Settings\Desktop\CSV Files')) {
while(false !== ($entry = readdir($handle)))
{
mysql_query("LOAD DATA LOCAL INFILE %handle
                          INTO TABLE main_table
                          FIELDS
                          TERMINATED BY ','
                          OPTIONALLY ENCLOSED BY '"'
                          ESCAPED BY '"'
                          LINES TERMINATED BY '\r\n'
                          IGNORE 1 LINES")
}
}

1 个答案:

答案 0 :(得分:1)

你的代码有很多错误,很难选择从哪里开始......

  • 您的目录路径未转义。
  • 您无法告诉您该目录无法打开。
  • %handle不是PHP变量,而且它是错误的变量。
  • $entry只是文件名,而不是完整路径。
  • mysql_query()来电结束时没有分号。
  • 你的'封闭'和'转义'字符都是",两者都没有被转义。
  • echo查询而不是运行它以确保它在没有工作的情况下正确形成。
  • 您实际上从未查看查询是否成功。
  • 打开错误报告,因为你有一些明显的解析错误,应该让这个脚本在运行之前失败。
  • 并且不受欢迎的mysql_*函数已被弃用,您应该使用PDO或MySQLi。

所以这可能适用于:

<?php
error_reporting(E_ALL);
define('DEBUG', true);

$basedir = 'C:\\Documents and Settings\\Desktop\\CSV Files\\';
if ($handle = opendir($basedir)) {
  while(false !== ($entry = readdir($handle))) {
    $query = "LOAD DATA LOCAL INFILE $basedir$entry
                INTO TABLE main_table
                FIELDS
                TERMINATED BY ','
                OPTIONALLY ENCLOSED BY '\"'
                ESCAPED BY '\\'
                LINES TERMINATED BY '\r\n'
                IGNORE 1 LINES");
    if(DEBUG) { echo $query . "\n"; }
    if(!mysql_query($query)) {
      die('Query failed: ' . mysql_error());
    }
  }
} else {
  echo "Could not open $basedir";
}