0

我对数据库的 mysql 用户拥有所有特权,但仍然低于错误

[Doctrine\DBAL\DBALException]
执行 'LOAD DATA LOCAL INFILE'/tmp/uk_insiders/tfo.uktrades_transaction_code.out' IGNORE INTO TABLE uktrades_transaction_codes FIELDS TERMINATED BY '|' 时发生异常 (ID,描述)':

警告:PDOStatement::execute(): LOAD DATA LOCAL INFILE 在 /Symfony/vendor/doctrine/dbal/lib/Doctrine/DBAL/Statement.php 第 138 行中被禁止

[Symfony\Component\Debug\Exception\ContextErrorException]
警告:PDOStatement::execute(): LOAD DATA LOCAL INFILE 禁止在 /Symfony/vendor/doctrine/dbal/lib/Doctrine/DBAL/Statement.php 第 138 行

4

5 回答 5

3

我有同样的问题......我通过替换来解决它:

加载数据本地文件...

经过

加载数据文件

本地选项:指定此开关时,将从运行 MySQL 客户端而不是 MySQL 服务器的主机读取输入文件。当未指定此开关时,将从 MySQL 主机上的数据目录中读取输入文件。要在没有 LOCAL 开关的情况下使用 LOAD DATA,连接的用户必须具有“文件”权限。(http://geekology.co.za/article/2010/02/how-to-import-or-export-csv-or -text-files-to-from-mysql-databases )

于 2014-01-13T10:08:27.813 回答
2

我曾尝试通过教义配置选项参数传递 PDO::MYSQL_ATTR_LOCAL_INFILE 参数,但没有成功,这是最终为我工作的解决方案。

    $dbhost = $this->getContainer()->getParameter('database_host');
    $dbuser = $this->getContainer()->getParameter('database_user');
    $dbpass = $this->getContainer()->getParameter('database_password');
    $connParams = $em->getConnection()->getParams();

    $pdoConn = new \PDO('mysql:host=' . $dbhost . ';dbname=' . $connParams['dbname'], $dbuser, $dbpass, array(
        \PDO::MYSQL_ATTR_LOCAL_INFILE => true
    ));

    $sql = "SET FOREIGN_KEY_CHECKS=0";
    $stmt = $pdoConn->prepare($sql);
    $stmt->execute();

    $sql = "LOAD DATA LOCAL INFILE '$file' IGNORE INTO TABLE $tablename FIELDS TERMINATED BY '|' $columns";

    $stmt = $pdoConn->prepare($sql);
    $stmt->execute();
于 2013-09-05T10:02:53.897 回答
1

得到相同的异常消息。我能够通过直接使用 PDO 来执行此操作。

于 2013-08-27T07:22:21.103 回答
0

两个有效的答案是解决方法:

  • 接受的答案建议使用 PDO 连接
  • 另一个答案建议删除 LOCAL 关键字,但这并不总是可能的

第三种干净的解决方案是在 Doctrine 中启用 LOCAL 选项,但这有点棘手:

https://stackoverflow.com/a/24759583/425204

注意:这还需要在服务器上的 MySQL 配置中启用 LOCAL:my.cnf

于 2015-07-02T10:20:02.483 回答
0

要在 Symfony 中启用PDO::MYSQL_ATTR_LOCAL_INFILEPDO 对象的选项,我们可以将其添加到 yml 配置中:

# Doctrine Configuration
doctrine:
    dbal:
        driver:   pdo_mysql
        options:
            !php/const PDO::MYSQL_ATTR_LOCAL_INFILE: true
        # Skip the rest

还要注意如何在 yml 文件中引用 PHP 常量,这种格式用于 Symfony 3.4。对于旧版本,请查看 Symfony文档

于 2020-06-10T14:19:03.230 回答