【问题标题】:Import CSV file in MySql using PHP code使用 PHP 代码在 MySql 中导入 CSV 文件
【发布时间】:2017-02-13 14:04:10
【问题描述】:

我必须使用 PHP 代码在 MySql 数据库的表中导入 CSV 文件。 CSV 文件如下:

“2016-09-02”、“100.01”、“4005.09”、“5000”、“1.09”、“120.09”、“100.5”、“200.77” “2016-09-03”、“150.01”、“4205.09”、“5600”、“1.10”、“150.09”、“300.5”、“300.77”

文件权限为 755。

表格字段为 9(包括 id 字段):第一个是日期时间字段,其他是浮点字段。 我使用的代码如下,它将在服务器站点上运行:

$csvFile = "../scripts/tabella.csv";

$db = @mysql_connect('**.***.**.***', 'Sql******', '*******');
@mysql_select_db('Sql******_*');

$query = 'LOAD DATA LOCAL INFILE \' '. $csvFile .' \' INTO TABLE mytable FIELDS TERMINATED BY \',\' ENCLOSED BY \'"\' LINES TERMINATED BY \'\n\' ';

if(!mysql_query($query)){
    die(mysql_error());
}
mysql_close($db);

mysql_error 返回第一个错误:'file not found'。 CSV 文件位于“www.mysite.it/mysite/scripts/tabella.CSV”中。它的权限是 755。我尝试使用 realpath($csvFile) 函数,但错误始终相同。

我尝试在 localhost 中运行相同的查询,但没有出现此错误,但表中只插入了一条记录,其字段值为 NULL。

你能帮帮我吗? 谢谢!

【问题讨论】:

  • 你能检查一下你是否有FILE 权限吗?你需要这个权限才能执行LOAD DATA
  • CSV 文件权限为 755

标签: php mysql csv import


【解决方案1】:

使用mysql_error获取错误

 if(!mysql_query($query)){
      die(mysql_error());

 }

【讨论】:

  • 谢谢.. 错误是“找不到文件”。它位于 www.mysite.it/mysite/scripts/tabella.csv。它的权限是 755。哪个是查询的正确路径?
  • 尝试使用文件的绝对路径
  • 如何恢复文件的绝对路径?我已经使用了 realpath PHP 函数,但错误是相同的 'File not found'..
【解决方案2】:

试试下面的代码..

$csvFile = "../scripts/tabella.csv";

//The Connection
$mysqli = new mysqli($host,$username,$password,$database);

//Check for successful connection
if ($mysqli->connect_errno) echo "Error - Failed to connect to MySQL: " . $mysqli->connect_error; die;

$query = 'LOAD DATA LOCAL INFILE \' '. $csvFile .' \' INTO TABLE mytable FIELDS TERMINATED BY \',\' ENCLOSED BY \'"\' LINES TERMINATED BY \'\n\' ';
//Do your query
$result = mysqli_query($mysqli,$query);

//Close the connection
mysqli_close($mysqli);

【讨论】:

    【解决方案3】:

    尝试这种简单的方法将您的 CSV 数据导入 Mysql 数据库。file 是您的文件路径的 HTML 元素名称 browse。

    if(isset($_POST["submit"]))
    {
        $file = $_FILES['file']['tmp_name'];
        $handle = fopen($file, "r");
        $c = 0;
        while(($filesop = fgetcsv($handle, 1000, ",")) !== false)
        {
            $name= $filesop[0];
    
            $sql = mysql_query("INSERT INTO tab(name) VALUES ('$name')");
            $c = $c + 1;
        }
    
        if($sql){
            echo "You database has imported successfully. You have inserted ". $c ." recoreds";
        }else{
            echo "Sorry! There is some problem.";
        }
    }
    

    【讨论】:

      【解决方案4】:

      试试这个编码它的工作

      <?php 
          $connect = mysqli_connect("localhost", "root", "", "testing");
          if(isset($_POST["submit"]))
      {
          if($_FILES['file']['name'])
          {
              $filename = explode(".", $_FILES['file']['name']);
              if($filename[1] == 'csv')
              {
                  $handle = fopen($_FILES['file']['tmp_name'], "r");
                  while($data = fgetcsv($handle))
                  {
                      $item1 = mysqli_real_escape_string($connect, $data[0]);  
                      $item2 = mysqli_real_escape_string($connect, $data[1]);
                      $query = "INSERT into excel(excel_name, excel_phone) values('$item1','$item2')";
                      mysqli_query($connect, $query);
                  }
                  fclose($handle);
                  echo "<script>alert('Import done');</script>";
              }
          }
      }
      ?>
      <!DOCTYPE html>
      <html>
      <head>
          <title></title>
          <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>  
          <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
      </head>
      <body>
          <form method="post" enctype="multipart/form-data">
              <div align="center">
                  <label>Select CSV File:</label>
                  <input type="file" name="file" />
                  <br />
                  <input type="submit" name="submit" value="Import" class="btn btn-info" />
              </div>
          </form>
      </body>
      </html>
      

      【讨论】:

      • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
      • 请深入解释一下
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      相关资源
      最近更新 更多