Chinaunix首页 | 论坛 | 博客
  • 博客访问: 219556
  • 博文数量: 42
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 420
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-09 10:55
个人简介

每天改变一点点,生活充满了惊喜。

文章分类

全部博文(42)

文章存档

2016年(8)

2015年(29)

2014年(5)

我的朋友

分类: PHP

2014-06-25 20:41:51

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) |
给主人留下些什么吧!~~