PHP的脚本使用LOAD DATA LOCAL INFILE方式从MySQL库中拉取数据,导入另个一库,报以下错误:
ERROR 1148: The used command is not allowed with this MySQL version
脚本一直运行无误,直到近期出现以上问题,由于脚本没有发生变化,怀疑是PHP解释器版本发生了变化,
事实确实如此,PHP解释器版本从5.2.6升级到了5.2.17版本。
但在新的解释器版本下,怎么解决这个问题呢?
在MySQL官方Manual的5.6.4小节有以下描述:
如果LOAD DATA LOCAL INFILE在服务器或客户端被禁用,试图执行该语句的客户端将收到下面的错误消息:
ERROR 1148: The used command is not allowed with this MySQL version
检查服务端:
mysql> SHOW VARIABLES LIKE '%local%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile | ON |
+---------------+-------+
1 row in set (0.00 sec)
处于开启状态,没有问题。
初步判断应该是客户端问题,而PHP连接MySQL的函数是mysql_connect。
脚本采用以下方式连接到MySQL:
mysql_connect($hostname, $username, $password);
mysql_connect函数的原型是:
resource mysql_connect ([ string $server [, string $username [, string $password [, bool $new_link [, int $client_flags ]]]]] )
是不是新版本PHP mysql_connect函数在默认情况下没有置客户端的访问标志为local_infile打开状态?
修改为以下方式连接数据库:
mysql_connect($hostname, $username, $password, true, 128);
其中第四个参数置为128,含义是:
#define CLIENT_LOCAL_FILES 128 /* Can use LOAD DATA LOCAL */
OK,问题解决。
至于是不是新版本的PHP 对 mysql_connect函数做了修改,还需要进一步查证。
阅读(2864) | 评论(0) | 转发(0) |