文件导入到mySQLi - 无法正常工作

时间:2018-06-17 02:17:13

标签: php mysqli

我一直试图将csv导入SQL for 3,现在已经4天了。

我已经阅读了所有堆栈溢出答案,用于将CSV导入mySQLi,而且还没有一个已经工作 - 所以这不是重复的。我的代码中有一些是由这里和互联网上的不同帖子组成的,但没有什么可行的。

我知道的事情: - 我的SQL连接很好

<?php

$servername = "localhost";
$username = "user";
$password = "password";
$dbname = "mattsDB"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 

// Check connection
if ($conn->connect_error) { 
die("Connection failed: " . $conn->connect_error); } 


LOAD DATA LOCAL INFILE ('hi.csv') 
INTO TABLE names 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
IGNORE 1 ROWS
(firstname);

?>

我也在最后一节摆弄了这样的事情:

$query = <<<eof
LOAD DATA LOCAL INFILE ('hi.csv') 
INTO TABLE names 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
IGNORE 1 ROWS
(firstname) 
eof;

它已经到了我乞求别人帮助的地步......我做错了什么?编辑:我知道您可以在SQL中手动执行此操作,但我需要通过代码执行此操作。

1 个答案:

答案 0 :(得分:0)

我曾经花了几个小时做类似的查询。问题是PHP正在乱七八糟的引号和斜线。最后,我通过使用文件的绝对路径名和OPTIONALLY ENCLOSED BY的一些奇怪组合来实现它:

$file=str_replace('\\','\\\\',$absolute_file_path);

//chr(34) = double quote
OPTIONALLY ENCLOSED BY '".chr(34)."'

我最终得到了这个问题:

<?php
$query=
    "
    LOAD DATA INFILE '".$file."'        //# note that the filename is also quoted
    INTO TABLE `table`
    FIELDS TERMINATED BY ','
    OPTIONALLY ENCLOSED BY '".chr(34)."'
    ESCAPED BY ''
    LINES TERMINATED BY '\n'
    ";

我还建议您阅读LOCAL,因为mysql也有可能无法找到该文件。