我知道这个问题还有其他的解决办法,但对我来说不管用。
我试图通过yii2网站在mysql数据库中执行load data local infle语句。我已经在过去的工作,所以我不知道为什么它不工作了。
我得到以下错误:
sqlstate[42000]:语法错误或访问冲突:1148此mysql版本不允许使用所用命令
我的db.php配置文件中有以下设置。
'attributes' => [ PDO::MYSQL_ATTR_LOCAL_INFILE => true ],
我还尝试禁用安全文件priv,但没有成功。
编辑
我尝试从workbench运行以下查询,它也通过workbench抛出一个错误。但是,它可以在mysql 5.7上运行。我目前正在使用8.0
LOAD DATA LOCAL INFILE 'D:/Temp/6_attlog.dat' IGNORE
INTO TABLE att_log
FIELDS TERMINATED BY '\t' ENCLOSED BY '''' LINES TERMINATED BY '\r\n' IGNORE 0 LINES
(@id, `date_time`, `dev_id`, `mode`, `work_code`, `work_code1`) SET `id` = TRIM(@id)
编辑2
我让它和“加载数据填充”一起工作。。。
…但它不适用于“加载数据本地填充”
这是我使用的代码。。。
$inFile = str_replace('\\', '/', realpath('uploads/'.$model->file->name));
Yii::$app->db->createCommand('
LOAD DATA LOCAL
INFILE \''.$inFile.'\' IGNORE
INTO TABLE att_log
FIELDS TERMINATED BY \'\\t\'
ENCLOSED BY \'\'\'\'
LINES TERMINATED BY \'\r\n\'
IGNORE 0 LINES
(@id, `date_time`, `dev_id`, `mode`, `work_code`, `work_code1`)
SET `id` = TRIM(@id)
')->execute();
unlink($inFile);
2条答案
按热度按时间xhv8bpkk1#
只是个建议
在php中,您可以使用单引号和双引号,这样您就可以用一种简单明了的方式构建命令,例如:
x33g5p2x2#
根据mysql文档,服务器需要配置为允许
LOCAL
关键字:LOCAL
仅当您的服务器和客户机都已配置为允许时才有效。例如,如果mysqld以local_infile
系统变量已禁用,LOCAL
不起作用。https://dev.mysql.com/doc/refman/8.0/en/load-data.html
您确定您的服务器已正确配置为允许使用此关键字吗?