2013-08-20 107 views
0

我都previleges到mysql用戶的數據庫,但仍然得到以下錯誤例外「LOAD DATA LOCAL INFILE

[主義\ 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對象::執行():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

回答

1

得到相同的異常消息。 我能夠通過髒污地使用PDO來執行此操作。

+0

我不能做的,看起來像一些pdo_driver問題。我正在使用symfony 2,所以只想通過學說使它工作。 – vishal

+0

唯一的解決方法是我發現只有PDO: '//獲取連接 $ cnx = $ this-> getDoctrine() - > getConnection(); $ stmt = $ cnx-> prepare('LOAD DATA LOCAL ...'); $ stmt-> execute(); ' 有關信息,我也參與了Symfony2和Doctrine2。這對我有效。 – Thierry

+0

這就是我現在這樣做,這是給我以上的錯誤。 – vishal

1

我曾嘗試通過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(); 
+0

您是否知道是否可以在學說層面設置它,或者您是否問過這個問題後情況是否發生了變化? – codecowboy

2

我有同樣的問題... 我解決它通過更換:

LOAD DATA LOCAL INFILE ...

通過

LOAD DATA INFILE

本地選項: 指定此開關時,將從運行MySQL客戶端的主機讀取輸入文件而不是MySQL服務器。如果未指定此開關,則會從MySQL主機上的數據目錄中讀取輸入文件。要使用LOAD DATA沒有本地交換機,連接的用戶必須具有「文件」的權限(http://geekology.co.za/article/2010/02/how-to-import-or-export-csv-or-text-files-to-from-mysql-databases

+0

這是不同的東西,我曾試過。 – vishal

0

兩個工作答案是解決方法:

  • 接受的答案提出使用PDO連接
  • 另一個答案建議刪除本地關鍵字,但它並不總是可能

第三,乾淨的解決方案,是讓教義本地選項,但它是一個有點棘手:

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

注:這也需要當地是在MySQL配置啓用服務器上:my.cnf中