我必须将csv导入mysql数据库 我无法使用加载数据infile,因为它已在Web服务器上禁用。
有没有其他方法可以这样做?
答案 0 :(得分:1)
如果您有可用的脚本语言,则可以遍历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;
}
?>
答案 1 :(得分:1)
循环浏览文件并使用准备好的查询进行插入。准备好的查询也应该更快,因为DB不必重新编译您发送它的每个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);
}