簡體   English   中英

在不加載數據infile的情況下將csv導入mysql

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM