如何在laravel 5.4

时间:2018-04-03 15:31:37

标签: laravel-5.4 mysql-5.5

我需要在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

请指导,该怎么办?

4 个答案:

答案 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