2014-04-18 111 views
0

所以,我明白了。只是想插入一個CSV文件到MySQL通過PHP PDO驅動程序:從雙引號字段括起來的cvs加載數據INFILE

<?php 
$databasehost = "localhost"; 
$databasename = "db"; 
$databasetable = "table"; 
$socketPath = "/home/mysql/mysql.sock"; 
$databaseusername="user"; 
$databasepassword = "pass"; 
$fieldseparator = ","; 
$fieldenclosed = '"'; 
$lineseparator = "\r\n"; 
$csvfile = "file.csv"; 

if(!file_exists($csvfile)) { 
    die("File not found. Make sure you specified the correct path."); 
} 

try { 
    $pdo = new PDO("mysql:host=$databasehost;dbname=$databasename;unix_socket=$socketPath", 
     $databaseusername, $databasepassword, 
     array(
      PDO::MYSQL_ATTR_LOCAL_INFILE => true, 
      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION 
     ) 
    ); 
} catch (PDOException $e) { 
    die("database connection failed: ".$e->getMessage()); 
} 

$affectedRows = $pdo->exec(" 
    LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." INTO TABLE `$databasetable` 
    FIELDS TERMINATED BY ".$pdo->quote($fieldseparator).", ENCLOSED BY ". $pdo->quote($fieldenclosed)." 
    LINES TERMINATED BY ".$pdo->quote($lineseparator)." IGNORE 1 LINES;"); 

echo "Loaded a total of $affectedRows records from this csv file.\n"; 

?> 

CSV文件是這樣的(用逗號隔開,並用雙引號)。

"X410","","4114068500","000010","04/15/2014","04/16/2015" 
"X410","","4220521243","000030","04/08/2014","04/08/2015" 
"X410","","4130003659","000010","04/02/2014","04/05/2014" 
"X410","","4220524277","000010","04/08/2014","04/08/2015" 
"X410","","4114038136","000010","04/07/2014","04/07/2015" 
"X410","","4130003594","000110","03/14/2014","03/14/2015" 
"X410","","4130003675","000010","04/04/2014","04/04/2015" 
"X410","","4130003623","000010","03/12/2014","03/12/2015" 
"X410","","4130003679","000010","04/09/2014","04/09/2015" 
"X410","","4130003679","000020","04/09/2014","04/09/2015" 

ENCLOSED BY的是,竟然放棄了我麻煩的,我做我的功課,並試圖$fieldenclosed = '\"\"'$fieldenclosed = "\"\"",與和withouth的的$pdo->quote($fieldenclosed)和任何其他怪異的concat塞入我雖然過的或發現其他話題也有類似的問題。

的MySQL拋出這個錯誤:

PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n' IGNORE 1 LINES' at line 2' in /root/csvUpload.php:32 

林在一個CentOS 6.4服務器運行MySQL 5.1。

任何想法?

回答

1

ENCLOSED BY之前不應該有逗號。它應該是:

$fieldenclosed = '"'; 

只是一個單引號 - 這是應該在字段的開始和結尾的字符。

您也錯誤輸入了變量名稱,沒有結束字符串並連接在調用$pdo->quote

$affectedRows = $pdo->exec(" 
    LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." INTO TABLE `$databasetable` 
    FIELDS TERMINATED BY ".$pdo->quote($fieldseparator)." ENCLOSED BY ".$pdo->quote($fieldenclosed)." 
    LINES TERMINATED BY ".$pdo->quote($lineseparator)." IGNORE 1 LINES;"); 
+0

逗號就在那裏,我在複製代碼的時候遇到了連接錯誤(固定在原始文章中)。 –

+0

回到正確的關閉。你對單引號部分是正確的,但由於某種原因,在我的MySQL 5.1版本中,正確的sintaxys在之前沒有逗號的地方放置了ENCLOSED BY部分。奇怪的東西。 –

相關問題