2017-05-22 79 views
0

我在这里仍然是新手。我想在php脚本上使用mysql LOAD DATA INFILE来加载csv文件。它既不会给出任何错误,也不会加载任何数据。任何人都可以请帮我吗?我使用下面的PHP代码PHP加载数据Infile不起作用

<?php 

$db1=mysql_connect('localhost', 'root', ''); 
mysql_select_db('student',$db1); 

$query = "LOAD DATA INFILE 'mysqlresults.csv' INTO TABLE student.student_info FIELDS TERMINATED BY ','"; 

$result = mysql_query($query); 
if ($result == true){ 
echo 'success'; 
} 
else{ 
echo 'not success'; 
} 
?> 
+0

该文件mysqlresults.csv是在你的php目录中吗? Mysql不知道这个路径,你应该得到该文件的绝对路径,并将其传递给mysql –

+0

请显示更多代码。最好是[mcve] – Jens

+0

是的,它已经在我的php目录中了。当我尝试在mysql Workbench中运行LOAD DATA INFILE'mysqlresults.csv'INTO TABLE student.student_info FIELDS TERMINATED BY','查询时,它解决了,但是当我尝试在php脚本中运行时,它没有@MarvinFischer – Peter

回答

0

您需要的路径设置为您的文件

LOAD DATA LOCAL INFILE '/path/to/your/local/file' INTO TABLE 

MySQL不会在相同的位置看的PHP脚本从运行,如MySQL会再看看在它自己的路径位置,并且不会找到该文件(导致它在其他地方)。

您可以使用__DIR__在PHP获取当前位置PHP运行它,所以查询看起来像$query = "LOAD DATA INFILE ". __DIR__ . DIRECTORY_SEPARATOR . "'mysqlresults.csv' INTO TABLE student.student_info FIELDS TERMINATED BY ','";

的DIRECTORY_SEPARATOR的原因DIR没有尾随斜线

+1

这看起来像正确的答案,但为什么它的工作原理和问题中发布的查询不? – axiac

+0

mysql与php脚本运行的位置不同,因为mysql会查找自己的路径位置,并且找不到该文件(导致它位于其他位置),您可以在__DIR__中使用__DIR__ PHP获取当前位置php正在运行它,所以查询看起来像 '$ query =“LOAD DATA INFILE”。 __DIR__。 DIRECTORY_SEPARATOR。 “'mysqlresults.csv'INTO TABLE student.student_info FIELDS TERMINATED BY','”;' 'DIRECTORY_SEPARATOR'是因为__DIR__没有结尾的斜杠, –

+0

我知道所有这些事情。把它们放在为未来读者带来好处的答案中。现在看起来你的答案不会得到许多赞扬,因为读者无法从中学到任何东西。 – axiac

0

您的PHP代码使用作为MySQL服务器的客户端的MySQL扩展。这两个组件(PHP和MySQL服务器)多次运行在不同的计算机上。

LOAD DATA INFILE从位于运行MySQL服务器的计算机上的CSV文件加载数据。

我想你的文件位于运行PHP脚本的计算机上(即运行MySQL客户端的计算机上)。

LOAD DATA INFILE命令的LOCAL选项告诉MySQL客户端从其运行的计算机上的文件(“本地”计算机)加载数据并将其发送到服务器进行加载。

对于这两个版本的命令,如果文件名不包含路径,MySQL客户端或服务器使用其配置来知道在哪里搜索文件(事实证明它通常找不到它,因为开发人员不知道/关心该配置并将该文件放在其他地方)。

解决方法很简单:始终使用文件的绝对路径。如果文件是本地文件(发生在涉及PHP的情况下99.99%),那么您可以使用PHP魔术常量__DIR__和函数dirname()来构建从包含脚本的位置开始的CSV文件的绝对路径代码。

从您的代码看来,CSV文件与PHP文件位于同一目录(这不是一个好习惯)。代码应该是这样的:

$path = __DIR__.'/mysqlresults.csv'; 
$query = "LOAD DATA LOCAL INFILE '$path' INTO TABLE student.student_info FIELDS TERMINATED BY ','";