我最近移动了web服务器,并且新的web服务器有不同版本的PHP。LOAD DATA LOCAL INFILE在使用PDO的php 5.5中不起作用
新服务器:PHP 5.5.3-1ubuntu2(CLI) 旧服务器:PHP 5.3.10(CLI)
在数据库服务器上,my.cnf中设置为允许本地INFILE。 我可以使用负载数据从本地INFILE:
- HeidiSQL
- The command line client running on the new web server using --local-infile=1
- PHP, using PDO, from the old web server
然而,当我尝试从全新的Web服务器连接,使用PHP与PDO,我得到: 出现数据库问题:SQLSTATE [42000]:语法错误或访问冲突:1148所使用的命令是不允许使用此版本的MySQL
的php.ini:
[MySQL]
; Allow accessing, from PHP's perspective, local files with LOAD DATA statements
; http://php.net/mysql.allow_local_infile
mysql.allow_local_infile = On
PDO构造:
$this->db_conn = new PDO("mysql:host=$host;dbname=$dbname;port=$port", $user, $pass, array(PDO::MYSQL_ATTR_LOCAL_INFILE => 1));
我也在PHP脚本中尝试了ini_set('mysql.allow_local_infile',1)和ini_set('mysql.allow_local_infile',true)。
LOCAL关键字是必需的,因为文件托管在Web服务器上,而不是数据库服务器上。
PHP 5.5对我有什么要求?
和你的MySQL版本? – Hackerman
这可能是一个权限问题?就我所知,PDO在这方面没有做任何特别的事情。 – tadman
MySQL Database: mysql Ver 14.14 Distrib 5.1.69,用于使用readline 5.1的redhat-linux-gnu(x86_64)。 托管在CentOS 5. 我在所有测试中使用相同的用户名和密码,所以它不应该是MySQL权限问题。 PHP脚本由root执行。 – NotEnoughGolds