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

私は同じ問題を抱えています...置き換えて解決します:

データのローカル INFILE をロードします ...

データ・インファイルのロード

ローカル オプション: このスイッチを指定すると、MySQL サーバーではなく、MySQL クライアントが実行されているホストから入力ファイルが読み込まれます。このスイッチが指定されていない場合、入力ファイルは MySQL ホストのデータ ディレクトリから読み込まれます。LOCAL スイッチなしで LOAD DATA を使用するには、接続ユーザーに「 FILE」権限が必要です。-text-files-to-from-mysql-databases )

于 2014-01-13T10:08:27.813 に答える
2

PDO::MYSQL_ATTR_LOCAL_INFILE パラメーターを doctrine 構成オプション パラメーターを介して渡そうとしましたが、機能しませんでした。これが最終的に機能するソリューションです。

    $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 に答える
0

2つの実用的な答えは回避策です:

  • 受け入れられた回答は、PDO接続を使用することを提案しています
  • 別の回答では、LOCAL キーワードを削除することを提案していますが、常に可能であるとは限りません

3 つ目のクリーンな解決策は、Doctrine で LOCAL オプションを有効にすることですが、少しトリッキーです:

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

注:これには、サーバーのMySQL構成でLOCALが有効になっていることも必要です:my.cnf

于 2015-07-02T10:20:02.483 に答える