2011-05-10 73 views
0

继续我的最后一个线程。尝试通过PHP上传脚本将用户生成的CSV导入到MySQL中。上传成功,但由于权限问题,我无法使用LOAD DATA。这里就是我想要做,而不是:使用PHP将CSV数据导入mySQL,第2部分

$row = 1; 
if (($handle = fopen($target_path, "r")) !== FALSE) 
    { 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
    { 
    $num = count($data); 
    echo "<p> $num fields in line $row: <br /></p>\n"; 
    $row++; 
for ($c=0; $c < $num; $c++) 
{ 
    $fullRow = $fullRow . $data[$c] . "," ; 
} 
echo $fullRow; 
mysql_query("INSERT INTO foo (field1, field2, field3, field4) VALUES ('$fullRow')"); 
$fullRow = NULL; 
} 
    fclose($handle); 
    } 

echo $fullRow从CSV文件吐出线的完整副本,除了在年底额外的逗号。这是为什么插入不能正常工作?当我通过phpMyAdmin手动上传时,导入的CSV文件没有问题。或者是否有代码的VALUE ('$fullRow')位?

回答

0

您可以简单地删除最后一个逗号。

for ($c=0; $c < $num; $c++) 
{ 
    $fullRow = $fullRow . $data[$c] . "," ; 
} 
echo $fullRow; 
$fullRow = substr($fullRow,0,-1); 

而且你的脚本也不行。

mysql_query(" INSERT INTO foo (field1, field2, field3, field4) VALUES ('$fullRow') "); 
$fullRow = NULL; 
0

Paolo_NL_FR的修复程序应该能让您启动并运行。该脚本虽然可以使用一些TLC,并且甚至没有基本的SQL注入保护。尝试类似这样的:

if (($handle = fopen($target_path, "r")) !== FALSE) 
{ 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
    { 
     $values = implode(",", array_map('mysql_real_escape_string', $data)); 
     mysql_query("INSERT INTO foo (field1, field2, field3, field4) VALUES ($values);"); 
    } 

    fclose($handle); 
}