LOAD DATA INFILE目录结构

时间:2013-09-27 18:07:46

标签: php mysql

我一直在搜索互联网并试图解决这个问题几个小时,最后陷入困境,并决定直接寻求帮助。

我正在运行一个linux专用服务器,需要通过运行从主机上的php页面执行的mysql查询将数据加载到我的mysql数据库中。

我遇到的问题是我不知道目录结构需要什么才能真正找到我的文件并将其上传。我将在下面举一个例子。

LOAD DATA INFILE 'WHAT IN THE WORLD GOES HERE TO MAKE THIS WORK?' 
INTO TABLE customers

每次尝试运行时返回的错误都是

Error Code: 1045. Access denied for user

我已经检查了权限,并且用户对相应的数据库拥有完全权限。从我自己的研究中我发现它可以抛出这个错误有几个原因,其中一个原因是它无法找到我试图上传的文件。

进入public_html文件夹后的文件结构如下:

reports/uploads/fileName.csv

提前感谢您的帮助!这让我疯了。如果我只是以完全错误的方式做这件事,或者有一种更简单的方法来完成我正在做的事情,我也会接受这方面的建议。

2 个答案:

答案 0 :(得分:1)

正如documentation

中所述
  • 如果文件名是绝对路径名,则服务器将其用作给定的。
  • 如果文件名是具有一个或多个主要组件的相对路径名,则服务器将搜索相对于服务器数据目录的文件。
  • 如果没有给出没有前导组件的文件名,服务器将在默认数据库的数据库目录中查找该文件。

public_html文件夹无关紧要,因为MySQL服务器正在读取该文件。如果您的Web服务器和数据库服务器是不同的计算机,并且您尝试从客户端而不是服务器加载文件,则需要使用LOAD DATA LOCAL INFILE来指定该文件。然后,文件名将相对于客户端应用程序的工作目录进行解释。

答案 1 :(得分:0)

一些想法:要对服务器上存在的文件使用LOAD DATA INFILE,执行加载数据的用户必须具有FILE权限。如果文件存在于客户端,请使用LOAD DATA LOCAL INFILE。

此链接很有用:http://dev.mysql.com/doc/refman/5.1/en/load-data.html

通常可以使用易于访问的位置(例如/ tmp)来测试LOAD FILE以确认权限是否正常。然后,您可以开始调试访问问题到您的真实文件所在的位置。

希望这有帮助。