我通过FTP将项目上传到1and1服务器。当网站进入将csv文件导入数据库表的函数时,我收到错误。
这是我的代码:
$file = "/Contenu/BD/file.csv";
$sql = "LOAD DATA INFILE '$file' INTO TABLE table CHARACTER SET UTF8 FIELDS TERMINATED BY \";\" LINES TERMINATED BY \"#\"";
当我使用“LOAD DATA INFILE
”时,我有一个SQL错误说:
" SQLSTATE[28000]: Invalid authorization specification:
1045 Access denied for user xxxxxx (using password: YES) "
当我使用LOAD DATA LOCAL INFILE
时,我没有SQL错误,但集成不起作用。
所以我来找你了解我的文件输入发生了什么。此文件在我的开发环境中,在localhost中正确导入,但不在生产服务器上导入。
(整个数据库适用于项目,所以我认为我的SQL登录没有错误)
谢谢你们的答案。
答案 0 :(得分:2)
查看用户在服务器之间可能因用户而异的GRANT FILE权限。特别是如果在初始用户设置期间使用通配符。或者我应该说,GRANT ALL ...
是在一台服务器上完成的,而不是在另一台服务器上完成的。
另见安全手册页,标题为Security Issues with LOAD DATA LOCAL。
并使用以下方法检查您的服务器设置:
show variables where variable_name='local_infile';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile | ON |
+---------------+-------+
对于那些无法更改服务器级变量的托管环境中的用户,通常会执行以下操作:
/some/path/to/you/home/shqnks
FILE
权限部分select user()
可以提供帮助。ssh
访问该文件并chmod
。示例here。LOCAL
有好运而其他人觉得很愚蠢,因为该文件已经在服务器上,并且本地将它放在临时目录中。可能对某些人有用的原因是可能会打开额外的文件级访问权限。