Armitage2k
Armitage2k

Reputation: 1254

PHP CSV import with delimited tab - ignore comma?

My script grabs a textfile full with tab delimited data from my inbox and is supposed to import it into my database. The problem is that the data can contain special characters such , or & or ;, which get picked up as delimiters and break my import.

I am unable to use LOAD DATA or LOAD DATA LOCAL due to my webhost's server configuration, hence the below method is the only way I have so far.

How can I hardcode the script below to delimited the data only by tabs and ignore everything else?

// 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++;
  }

thanks

Upvotes: 0

Views: 360

Answers (1)

Michael Krikorev
Michael Krikorev

Reputation: 2156

Set tab as the wanted delimiter like this:

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

The zero indicates no limit with respect to the length of longest line. Documentation: http://php.net/manual/en/function.fgetcsv.php

Upvotes: 1

Related Questions