使用Laravel将CSV文件上传到MySQL

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Laravel将CSV文件上传到MySQL相关的知识,希望对你有一定的参考价值。

我正在尝试将一个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}}

我不知道什么是错的。 有人可以帮帮我吗?

答案

请试一试

设置PDO连接选项

database.php中设置属性PDO :: MYSQL_ATTR_LOCAL_INFILE

'mysql' => array(
            ....
            'options'    => [PDO::MYSQL_ATTR_LOCAL_INFILE=>true],
        ),
另一答案

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

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

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

将CSV文件上传到MySQL服务器

加快 Django 表单以将大型(500k obs)CSV 文件上传到 MySQL 数据库

MySQL服务器在运行Laravel Queue时已经消失了

将用户上传的 CSV 文件从 ASP.NET 解析到 MySQL DB。安全问题

使用nodejs将CSV文件导入mysql数据库