我们正在将数据库从位于Web服务器上的移动到单独的服务器(从Amazon EC2 Web服务器到RDS实例)。
由于数据库将位于与Web服务器不同的计算机上,因此在此之前需要有一个LOAD DATA INFILE才能正常工作。
在我的开发服务器上进行测试,结果证明它不起作用:
在起作用的两件事之间,它排除了:
我得到的错误是:错误1148(42000):此MySQL版本不允许使用命令(如果我不使用–local_infile = 1,我将从mysql命令行中获取该错误)
其他一些相关信息:
因此,connect命令需要一个额外的标志集:
mysql_connect($dbHost, $dbUser, $dbPass, false, 128);
我已经用phpinfo()来确认 mysql.allow_local_infile = On
mysql.allow_local_infile = On
我唯一没有尝试过的事情就是在我的开发服务器上编译mysql服务器,并打开允许本地infile的标志…但是即使我在我的开发服务器上正常工作,它也不会帮助我使用Amazon RDS。(此外,LOAD DATA LOCAL INFILE确实可以从mysql命令行运行。)
似乎是php的mysql_connect()特有的问题
任何使用LOAD DATA LOCAL INFILE(也许来自Amazon RDS)的人都知道使它起作用的技巧吗?
我已经放弃了这一点,因为我认为这是php中的错误- 特别是mysql_connect代码,现已弃用。可以通过使用与@eggyal提到的错误报告中提到的步骤类似的步骤自行编译php,对源代码进行更改来解决该问题:https ://bugs.php.net/bug.php ? id = 54158
相反,我将通过执行system()调用并使用mysql命令行来解决此问题:
$sql = "LOAD DATA LOCAL INFILE '$csvPathAndFile' INTO TABLE $tableName FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\\\"' ESCAPED BY '\\\\\\\\' LINES TERMINATED BY '\\\\r\\\\n';"; system("mysql -u $dbUser -h $dbHost --password=$dbPass --local_infile=1 -e \"$sql\" $dbName");
那对我有用。