我需要在laravel 5.4中转换以下查询
$loadDataToTempTableSql = "LOAD DATA LOCAL INFILE '".$filename."' INTO TABLE ABC FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\r' IGNORE 1 LINES";
$loadDataToTempTableRes = mysqli_query($link,$loadDataToTempTableSql);
$loadedData = mysqli_affected_rows($link);
我做了什么
第1步:
DB::select($load_data_to_temp_table_sql);
抛出异常:
SQLSTATE [HY000]:常规错误:2014无法执行查询 其他未缓冲的查询处于活动状态。考虑使用 PDOStatement对象::使用fetchall()。或者,如果您的代码只是永远 要对mysql运行,您可以通过设置启用查询缓冲 PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY属性。 (SQL:LOAD DATA 本地信息 ' /库/ Web服务器/文件/公/ ABC copy.csv' INTO表ABC字段终止于',' 选择性地包含在'"'线路终止于' ' IGNORE 1 LINES)
第2步:
$pdo = DB::connection()->getPdo();
$pdo->exec($load_data_to_temp_table_sql);
再次异常:
PDO :: exec():禁止加载数据本地INFILE
请指导,该怎么办?
答案 0 :(得分:1)
我也遇到过类似的问题,在谷歌搜索后,现在已经解决了。您应该将以下内容添加到mysql/my.cnf
文件中:
[Server]
local_infile=true
之后,将'options' => array(PDO::MYSQL_ATTR_LOCAL_INFILE => true)
添加到项目的config/database.php
文件中。
现在从cmd / terminal重新启动MySQL。运行LOAD DATA LOCAL INFILE
很好。如果仍然遇到问题,可以访问https://tenerant.com/blog/using-load-data-local-infile-in-a-laravel-migration/。
答案 1 :(得分:0)
我没跟DB工作。我与PDO合作,然后我不得不在MYSQL_ATTR_LOCAL_INFILE
添加到config文件夹中的database.php文件
'options' => [PDO::MYSQL_ATTR_LOCAL_INFILE => true],
答案 2 :(得分:0)
这是逐步解决您的问题:
转到/打开配置文件config/database.php
在connections => mysql
数组上添加以下行以在文件中启用本地。
// config/database.php
...
...
'mysql' => [
...
...
'driver' => 'mysql',
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
PDO::MYSQL_ATTR_LOCAL_INFILE => true, // this must be true
]) : [],
],
重新启动服务器并清除配置和缓存:
php artisan config:clear
php artisan cache:clear
php artisan serve
知道了,现在你去了。
答案 3 :(得分:0)
如果您在 homestead 上使用 ubuntu 或虚拟服务器,请填写:
在您的根宅基地(带有流浪文件)文件夹中:
流浪 ssh
编辑文件: 须藤纳米 /etc/apparmor.d/usr.sbin.mysqld
查找:
并添加这一行:
/home/Code/NameOfyourProject/public/[上传文件夹的名称]/* rw
保存
然后:
sudo service apparmor restart