我一直试图将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中手动执行此操作,但我需要通过代码执行此操作。
答案 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也有可能无法找到该文件。