使用 Laravel 将 CSV 文件上传到 MySQL

Posted

技术标签:

【中文标题】使用 Laravel 将 CSV 文件上传到 MySQL【英文标题】:Upload CSV file to MySQL using Laravel 【发布时间】:2015-04-30 22:39:55 【问题描述】:

我正在尝试将 csv 文件上传到 Laravel 中的表 users

这是我的php 脚本:

private function _import_csv($path, $filename)
    

        $csv = $path . $filename;
        $query = sprintf("LOAD DATA local INFILE '%s' INTO TABLE users FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\"' LINES TERMINATED BY '\\n' IGNORE 0 LINES (`firstname`, `lastname`, `username`, `gender`, `email`, `country`, `ethnicity`, `education`  )", addslashes($csv));
    return DB::connection()->getpdo()->exec($query);





public function uploadUsers()


    if (Input::hasFile('fileInput'))

        $file = Input::file('fileInput');
        $name = time() . '-' . $file->getClientOriginalName();

        $path = 'public/uploads/'.date('Y/m/');

        $file->move($path, $name);
        $this->_import_csv($path, $name);

    

    return Response::json(["success"=>true]);

但是我收到了这个错误:

"error":"type":"ErrorException","message":"PDO::exec(): LOAD DATA LOCAL INFILE forbidden","file":"C:\\wamp\\www\\lc2\\laravel\\app\\controllers\\UsersController.php","line":224

我不知道怎么了。有人可以帮帮我吗?

【问题讨论】:

【参考方案1】:

请尝试一下

设置 PDO 连接选项

database.php

中设置属性PDO::MYSQL_ATTR_LOCAL_INFILE
'mysql' => array(
            ....
            'options'    => [PDO::MYSQL_ATTR_LOCAL_INFILE=>true],
        ),

【讨论】:

【参考方案2】:

尝试在 sprintf 函数之前清理查询字符串。

【讨论】:

以上是关于使用 Laravel 将 CSV 文件上传到 MySQL的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 4.2 中使用带有自定义预过滤器的 AJAX 上传 CSV 文件

将 CSV 流从 Ruby 上传到 S3

Laravel 文档多次上传未保存到数据库

Laravel。将SQLite上载到服务器(MySQL)

将 CSV 文件上传到 SQL 服务器

将CSV文件上传到MySQL服务器