我正在使用 MySQL LOAD DATA LOCAL INFILE
命令,但收到此错误:
PDOException: SQLSTATE[42000]: Syntax error or access violation: 1148 The used
command is not allowed with this MySQL version: LOAD DATA LOCAL INFILE
'/tmp/phpI0ox54' INTO TABLE `dev_tmp` FIELDS TERMINATED BY ',' ENCLOSED
BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES; Array ( ) in
dc_real_estate_form_submit() (line 147 of /PATH/TO/PHP/SCRIPT).
我们可以更改什么设置以允许在文件中加载数据本地?
这是我们正在使用的 Drupal 7 代码:
$sql = "LOAD DATA LOCAL INFILE '".$file."'
INTO TABLE `dev_tmp`
FIELDS
TERMINATED BY ','
ENCLOSED BY '\"'
LINES
TERMINATED BY '\\r\\n'
IGNORE 1 LINES";
db_query($sql);
最佳答案
在 MySQL 中加载本地文件存在安全隐患,并且默认情况下处于关闭状态,如果可以的话,您希望将其关闭。如果不允许,您会收到此错误:
ERROR 1148 (42000): The used command is not allowed with this MySQL version
解决方案:
在 mysql 命令行上使用
--local-infile=1
参数:当您在终端上启动 MySQL 时,请包含
--local-infile=1
参数,如下所示:mysql --local-infile=1 -uroot -p mysql>LOAD DATA LOCAL INFILE '/tmp/foo.txt' INTO TABLE foo COLUMNS TERMINATED BY '\t';
然后该命令被允许:
Query OK, 3 rows affected (0.00 sec) Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
或者将参数发送到mysql守护进程:
mysqld --local-infile=1
或者在my.cnf文件中设置(这是一个安全风险):
找到您的 mysql
my.cnf
文件并以 root 身份编辑它。在 mysqld 和 mysql 指示符下添加
local-infile
行:[mysqld] local-infile [mysql] local-infile
保存文件,重启mysql。再试一次。
更多信息可以在这里找到:http://dev.mysql.com/doc/refman/5.1/en/load-data-local.html
关于php - 错误 1148 MySQL 此 MySQL 版本不允许使用的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59129239/