【问题标题】:Parse text file line by line and store data in MYSQL database逐行解析文本文件并将数据存储在MYSQL数据库中
【发布时间】:2016-07-13 17:08:26
【问题描述】:

我现在不关心安全性。我已经在这个代码上停留了 4 天。请帮忙。这是我此时的代码。我正在我的 php Web 应用程序中上传一个文本文件。上传成功。我将文件移动到一个目录,这也有效。我只需要在 foreach 循环期间解析算法的帮助。它将存储这两个值一次,然后就不会再这样做了。我已经将数据库设置保存在我的文件中。文本文件是制表符分隔的,所有数据类型都在数据库表中。

     $file_name= $_FILES['file1']['name'];
     $add= "uploads/$file_name";
     $move = move_uploaded_file($_FILES['file1']['tmp_name'], $add);
     $get = file_get_contents("$add");
     $delimiter = "\n";
     $line = explode($delimiter, $get);
     foreach ($line as $value => $data) {
         $delimiter = "\t";
         $tab = explode($delimiter, $data);
         $datetime = $tab[0];
         $deltatime = $tab[1]; 
         $sql = "INSERT INTO RobotData (datetime, deltatime) VALUES('$datetime', '$deltatime')"; 
         $store = mysqli_query($conn, $sql);
     }

【问题讨论】:

  • 做过任何基本的调试,比如var_dump($line),看看你的爆炸是否正确? var_dump($tab) 怎么样?
  • 你能给我们一个数据样本吗?
  • 数据示例:(一行)6/17/2013 3:35:49 PM 55.0031
  • 我已经测试了第二个explode函数是否将它存储到一个数组中并且确实如此..
  • 也许如果你向我们展示了所有相关代码,至少在 foreach 循环结束时它会变得非常明显

标签: php mysql parsing explode


【解决方案1】:

试试这样的,让我知道

$file_name = $_FILES['file1']['name'];
$add = "uploads/$file_name";
$move = move_uploaded_file($_FILES['file1']['tmp_name'], $add);

$handle = fopen($add, "r");

if ($handle) {

    while (($line = fgets($handle)) !== false) {

        $arr = explode("\t", $line);
        $datetime = mysqli_real_escape_string($arr[0]);
        $deltatime = mysqli_real_escape_string($arr[1]);

        $sql = "INSERT INTO RobotData (datetime, deltatime) VALUES('$datetime', '$deltatime')";
        $store = mysqli_query($conn, $sql);
    }

    fclose($handle);
} else {
    // error opening the file.
} 

编辑

在字符串中添加了转义特殊字符以用于 SQL 语句

【讨论】:

  • 是的。你可以添加它。如果您认为我的回答帮助您解决了您的问题,请接受。 ;)
  • 现在我遇到了今天早上遇到的同样问题...当我让脚本工作时,我在文本文件中添加另一列数据,然后它不会存储。我所做的只是添加另一个索引为 2 的变量,并在 sql 查询中添加列名和变量。他们都相应地匹配..所以加重了哈哈
  • 有什么错误吗?可能有mysql查询错误。添加类似这样的内容$store = mysqli_query($conn, $sql) or die(mysqli_error()); 它将让我们保证查询是否正确
  • 使用浏览器的开发工具或使用查看源代码来检查实际发生的情况。我确定这里存在语法问题。
  • 我正在重新配置我的 Web 应用程序环境.. 所以我希望这次它可以工作.. 它曾经使用 3 条数据工作过,然后不会让我再次存储它..和以前一样..
【解决方案2】:

这是我现在使用的代码...

     $file_name= $_FILES['file1']['name'];
     $add= "uploads/$file_name";
     $move = move_uploaded_file($_FILES['file1']['tmp_name'], $add);
     $handle = fopen($add, "r");
     if ($handle) {
         while (($line = fgets($handle)) !== FALSE) {
            $delimiter = "\t";
            $tab = explode($delimiter, $line);
            $datetime = $tab[0];
            $deltatime = $tab[1];  
             $sql = "INSERT INTO RobotData (datetime, deltatime) VALUES ('$datetime', '$deltatime')"; 
             $store = mysqli_query($conn, $sql);
              if($store === TRUE) {
                  fclose($handle);
                 $delete= unlink($add);
                 echo "YOU DID IT!!";
             }
             else {
                 fclose($handle);
                 $delete= unlink($add);
                 echo "YOU SUCK!!";
             }
         }
    }
    else {
         fclose($handle);
         $delete= unlink($add);
         echo "Something went wrong";
    }

【讨论】:

    【解决方案3】:

    试试LOAD DATA INFILE - 它的创建是为了从文本文件中快速加载大量数据:

    LOAD DATA LOCAL INFILE '/full/path/to/text/file'
    INTO TABLE RobotData
    COLUMNS TERMINATED BY '\t'
    LINES TERMINATED BY '\n';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多