2012-04-20 172 views
0

我们正试图通过PHP将CSV文件导入到MySQL中。字符编码是utf-8(检查,标准化和验证)。当使用MySQL客户端界面工具导入时,所有行都存在。代码如下:在PHP中处理导入的CSV文件时,只有一半行被导入

$handle = fopen($this->file_name, 'r+') or die ('cant open a '.$this->file_name); 
$new_filename = $upload_directory.'/'.date('Y_m_d_H_i_s').'_data_import.csv'; 
$for_import = fopen($new_filename, 'x+') or die ('cant open a '.$new_filename.'_for_import'); 

$data = array(); 
$row_counter = 0; 

while (($row = fgetss($handle)) !== false) 
{ 
    $row = fgetss($handle); 
    if (($row_counter > $this->rows_to_ignore)) 
{ 
    $enc = mb_detect_encoding($row); 
    $row = iconv($enc, 'UTF-8', $row); 
    $row = str_replace(", ", '\\, ', $row); 
    $row = trim($row); 
    $row = str_getcsv($row, ',', '"', '\\'); 
    fputcsv($for_import, $row, ',', '"'); 
} 

$row_counter++; 

} 
fclose($for_import); 
fclose($handle); 

row_counter变量返回约50%的所有行。有任何想法吗?

感谢

回答

0

你打电话$row = fgetts($handle)两次。第一个调用是在你的while()条件中并消耗一行,第二个调用在循环内部并消耗另一行。来自第一个电话的行正在丢失。

+0

非常感谢!你让它听起来很简单... – user1346416 2012-04-20 16:21:12