2014-02-24 100 views
1

我正在運行Windows計算機進行本地開發,並試圖將大型csv文件加載到mysql中。我的代碼如下所示:使用「LOAD DATA」命令將CSV文件導入到mysql表中

$sql_query = 'LOAD DATA LOCAL 
    INFILE "' . $tempLoc . '" 
    INTO TABLE users 
    FIELDS 
    TERMINATED BY " " 
    ENCLOSED BY "\'" 
    LINES 
    TERMINATED BY "\\n"         
    (
    id, 
    name, 
    value 
    )'; 

$statement = $this->adapter->query($sql_query); 
$resultSet = $statement->execute(); 
$this->adapter->getDriver()->getConnection()->commit(); 

當我打開我得到這個錯誤的文件: -

「PDOStatement對象::執行()[pdostatement.execute]:LOAD DATA LOCAL INFILE在禁... 「

我已經搜索了答案,但我一直無法解決問題。 但是,當我與當地分貝的分貝連接在我的本地M/C(即,與根本地主機)它運行良好

  • 我的應用是在本地機器
  • DB連接到另一個服務器
+0

你使用的是相對路徑還是絕對路徑?使用絕對路徑 – enigmaticus

+0

即時通訊使用絕對路徑 – freakydev

回答

3
  1. 確保服務器允許LOAD DATA LOCAL INFILE

    [server]local-infile=1

  2. 確保您的MySQL用戶有 '文件' 特權

  3. 在你的PHP腳本設置PDO屬性,

    $pdo = new PDO($dsn, $username, $password, array(PDO::MYSQL_ATTR_LOCAL_INFILE=>1))

+0

Wowww..Its真的很適合我。謝謝alot @ akhil.cs。 – freakydev

1

當您使用LOAD DATA LOCAL時,您告訴MySQL服務器進程在其自己的文件系統上打開本地文件並讀取它。大多數MySQL操作使用客戶端和MySQL服務器之間的TCP/IP連接來發送和接收所有數據。但是這個操作是不同的。

如果您的客戶端代碼在一臺計算機上運行,​​並且服務器正在另一臺計算機上運行,​​除非它們共享文件系統,否則這將不起作用。提示:如果您使用的是每月5美元託管服務中的一項,則這可能無效。

+0

作爲一個註釋,將CSV數據轉換爲一系列與'VALUES'兼容(和[正確轉義](http://bobby-tables.com/)插入)與開放一樣困難櫥櫃門。這就是'mysql'命令行工具在使用['LOAD DATA LOCAL INFILE']時執行類似於將數據從本地計算機傳輸到遠程計算機的功能(http://stackoverflow.com/questions/15579221/load-data -infile-on-remote-machine) – tadman