带有分隔标签的PHP CSV导入 - 忽略逗号?

时间:2017-03-08 10:55:51

标签: php mysql csv

我的脚本从我的收件箱中获取带有制表符分隔数据的文本文件,并且应该将其导入我的数据库。问题是,数据可能包含,&;等特殊字符,这些字符会被分隔为分隔符并导致导入。

由于我的webhost服务器配置,我无法使用LOAD DATALOAD DATA LOCAL,因此以下方法是我到目前为止唯一的方法。

如何对下面的脚本进行硬编码,仅通过tabs分隔数据并忽略其他所有内容?

// read content of CSV file
while (($row = fgetcsv($getdata)) !== FALSE) {

  // skip the top 3 rows (header information) - Line 0, Line 1 and Line 2
  if ($line <= 2) {
    $line++;
    continue;

  } else {

    $sql = "INSERT INTO `$dbtable`
      (`OPERA_CONF`, `CRS`, `HOLIDEX`, `ARRIVAL`, `DEPARTURE`, `NIGHTS`, `ADULTS`, `KIDS`, `TITLE`, `FIRST`, `LAST`, `NATIONALITY`, `ROOM`, `ROOM_TYPE`, `MBR`, `MBR_NO`, `MBR_LVL`, `RATE`, `CURR`, `RATECODE`, `MARKET`, `COMPANY`, `AGENT`, `EMAIL`, `PHONE`, `TIMESTAMP`)
      VALUES (
        '" . mysqli_real_escape_string($mysqli, $row[0]) . "',
        '" . mysqli_real_escape_string($mysqli, $row[1]) . "',
        '" . mysqli_real_escape_string($mysqli, $row[2]) . "',
        '" . mysqli_real_escape_string($mysqli, $row[3]) . "',
        '" . mysqli_real_escape_string($mysqli, $row[4]) . "',
        '" . mysqli_real_escape_string($mysqli, $row[5]) . "',
        '" . mysqli_real_escape_string($mysqli, $row[6]) . "',
        '" . mysqli_real_escape_string($mysqli, $row[7]) . "',
        '" . mysqli_real_escape_string($mysqli, $row[8]) . "',
        '" . mysqli_real_escape_string($mysqli, $row[9]) . "',
        '" . mysqli_real_escape_string($mysqli, $row[10]) . "',
        '" . mysqli_real_escape_string($mysqli, $row[11]) . "',
        '" . mysqli_real_escape_string($mysqli, $row[12]) . "',
        '" . mysqli_real_escape_string($mysqli, $row[13]) . "',
        '" . mysqli_real_escape_string($mysqli, $row[14]) . "',
        '" . mysqli_real_escape_string($mysqli, $row[15]) . "',
        '" . mysqli_real_escape_string($mysqli, $row[16]) . "',
        '" . mysqli_real_escape_string($mysqli, $row[17]) . "',
        '" . mysqli_real_escape_string($mysqli, $row[18]) . "',
        '" . mysqli_real_escape_string($mysqli, $row[19]) . "',
        '" . mysqli_real_escape_string($mysqli, $row[20]) . "',
        '" . mysqli_real_escape_string($mysqli, $row[21]) . "',
        '" . mysqli_real_escape_string($mysqli, $row[22]) . "',
        '" . mysqli_real_escape_string($mysqli, $row[23]) . "',
        '" . mysqli_real_escape_string($mysqli, $row[24]) . "',
        '" . mysqli_real_escape_string($mysqli, $local_time) . "'
      )";

    if(!$mysqli->query($sql)) {
        echo "\n Error while importing row $line.<br>";
        $errcount++;
    }
    $line++;
  }

感谢

1 个答案:

答案 0 :(得分:1)

将标签设置为想要的分隔符,如下所示:

while (($row = fgetcsv($getdata,0,"\t")) !== FALSE) {

零表示相对于最长线的长度没有限制。文档:http://php.net/manual/en/function.fgetcsv.php