[英]import csv to mysql without load data infile
我必須將一個csv導入到mysql數據庫中,因為它已在網絡服務器上禁用,因此無法使用加載數據infile。
還有其他方法嗎?
如果有可用的腳本語言,則可以遍歷CSV行並使其生成SQL代碼:
PHP示例:
<?php
$lines = file('file.csv');
foreach($lines as $line){
//sepatates each cell by the delimiter "," (watch for delimiters in the cell, escaped or not)
$cell = explode(",",$line);
$sql = "INSERT INTO table (col1,col2,col3) VALUES (";
$sql.= "'".$cell[0]."','".$cell[1]."','".$cell[2]."');";
echo $sql;
}
?>
循環瀏覽文件並使用准備好的查詢進行插入。 准備好的查詢也應該更快,因為數據庫不必重新編譯發送給它的每個SQL字符串。 當您有成千上萬的行時,這將更加明顯。
<?php
// assume $db is a PDO connection
$stmt = $db->prepare('INSERT INTO table (col1, col2, col3) VALUES(?, ?, ?)');
// read file contents to an array
$lines = file('file.csv');
// insert each line
foreach ($lines as $line) {
// see manual to specify $delimter, $enclousure, or $more
$cols = str_getcsv($lines);
$stmt->execute($cols);
}
可以的 由於我們使用的是file()
,因此如果您的CSV文件很大,腳本可能會占用大量內存。 為了更好地利用資源,請執行以下操作以一次僅在內存中保留一行:
<?php
// assume $db is a PDO connection
$stmt = $db->prepare('INSERT INTO table (col1, col2, col3) VALUES(?, ?, ?)');
$handle = fopen('test.csv', 'r');
while ($cols = fgetcsv($handle)) {
$stmt->execute($cols);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.