我有需要將數據加載到從CSV文件中的MySQL數據庫的功能,所以我寫了一些代碼:如何加載從本地文件中的數據PHP中的PDO驅動
try {
$pdo = new PDO('mysql:host=localhost;dbname=borsino_ittico',
'XXXXX', 'XXXXX',
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4",
PDO::MYSQL_ATTR_LOCAL_INFILE => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
);
}
catch (PDOException $e) {
$mex= "database connection failed: ".$e->getMessage();
return $mex;
}
其他代碼
try {
$affectedRows = $pdo->exec("
LOAD DATA LOCAL INFILE ".$pdo->quote($file)." INTO TABLE ".
$pdo->quote($dbTable)." FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\n,\\n'");
$mex= "Loaded a total of $affectedRows records from this csv file.\n";
return $mex;
}
catch (PDOException $e) {
$mex= "ATTENZIONE, ERRORE CARICAMENTO DATI: ".$e->getMessage();
return $mex;
}
事實上,這似乎並沒有工作和拋出異常:
SQLSTATE [42000]:語法錯誤或訪問衝突:1064您的S上的錯誤QL語法;檢查與您的MySQL服務器版本相對應的手冊,以在''asta'FIELDS TERMINATED BY'附近使用正確的語法;';'行終止BY '\ n'」在1號線
第一個問題是關於$文件(資源): 應該是絕對/相對形式(喜歡C:\ XXX \ csvfile.csv或.. \ xxx \ csvfile.csv)或者我要用一個函數暴露它喜歡$csvFile=fopen($file,"r");
然後,我應該使用pdo本地函數喜歡$pdo->quote()
插入參數(如文件,表名,分隔符,行終止)在$ affectedRows查詢?
如何強制查詢的執行甚至在某些行上出現錯誤?
我引用建議的表名ASTA,然後我提出了這個新的異常'SQLSTATE [42000]:語法錯誤或訪問衝突:1148使用的命令不允許這個MySQL版本' – JahStation 2014-12-02 16:20:16
未啓用加載infile。 .. – 2014-12-02 16:20:32
應該從php.ini或其他地方啓用它? – JahStation 2014-12-02 16:25:23