【问题标题】:Avoiding \r\n\ on mysql import在 mysql 导入时避免 \r\n\
【发布时间】:2014-05-29 14:24:32
【问题描述】:

我有以下代码可以将 CSV 文件导入 MYSQL 数据库,但在导入时遇到了一些问题。

$csv_file = CSV_PATH . "resultsimport.csv"; // Name of your CSV file
$csvfile = fopen($csv_file, 'r');
$theData = fgets($csvfile);
$i = 0;
while (!feof($csvfile)) {
$csv_data[] = fgets($csvfile);
$csv_array = explode(",", $csv_data[$i]);
$insert_csv = array();
$insert_csv['ID'] = $csv_array[0];
$insert_csv['SerialNo'] = $csv_array[1];
$insert_csv['ChannelNo'] = $csv_array[2];
$insert_csv['IL850'] = $csv_array[3];
$insert_csv['IL1300'] = $csv_array[4];
$insert_csv['IL1310'] = $csv_array[5];
$insert_csv['IL1550'] = $csv_array[6];
$insert_csv['RL850'] = $csv_array[7];
$insert_csv['RL1300'] = $csv_array[8];
$insert_csv['RL1310'] = $csv_array[9];
$insert_csv['RL1550'] = $csv_array[10];
$query = "INSERT INTO results(ID,SerialNo,ChannelNo,IL850,IL1300,IL1310,IL1550,RL850,RL1300,RL1310,RL1550)
VALUES('".$insert_csv['ID']."','".$insert_csv['SerialNo']."','".$insert_csv['ChannelNo']."','".$insert_csv['IL850']."','".$insert_csv['IL1300']."','".$insert_csv['IL1310']."','".$insert_csv['IL1550']."','".$insert_csv['RL850']."','".$insert_csv['RL1300']."','".$insert_csv['RL1310']."','".$insert_csv['RL1550']."')";
$n=mysql_query($query, $connect );
$i++;
}
fclose($csvfile);

echo "File data successfully imported to database";
mysql_close($connect);

以下是 CSV 文件中前两行的示例:

ID,SerialNo,ChannelNo,IL850,IL1300,IL1310,IL1550,RL850,RL1300,RL1310,RL1550
1405230001-A-MTP-1-01,1405230001,A-MTP-1-1,0.320,0.150,,,,,,

如您所见,其中两列中只有数据,但在某些导入时,最后一列中会导入数据。

当最后一列中没有数据时会出现问题,我的导入过程会将 \r\n\ 添加到数据库中。

我怎样才能避免这种情况?

最后我在导入时也有一个空行。

【问题讨论】:

    标签: php mysql csv import


    【解决方案1】:

    PHP 5 有一个内置函数可以为您解析 CSV,fgetcsv。它比依赖explode更好(这对于用引号括起来的文本可能包含逗号是天真的。空行将导致空$data数组,因此测试并跳过它们

    while (($data = fgetcsv($csvfile, 1000, ",")) !== FALSE) {
        if (empty($data) continue;
        // rest of data manipulation continues
    }
    

    旁注:您不应该使用mysql_* 系列函数。该扩展名早已被弃用。您应该使用 mysqli 或 PDO 连接到您的数据库并使用准备好的查询来防范 SQL 注入攻击。

    【讨论】:

      猜你喜欢
      • 2021-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-07
      • 2017-09-16
      • 1970-01-01
      • 2015-04-25
      • 1970-01-01
      相关资源
      最近更新 更多