2017-03-08 19 views
0

私のスクリプトは、受信トレイからタブ区切りのデータでテキストファイルを完全に取得し、それを自分のデータベースにインポートすることになっています。問題は、データには、,または&または;などの特殊文字が含まれている可能性があります。この特殊文字は区切り文字として認識され、インポートが中断されます。カンマ区切りで区切られたPHP CSVインポート?

ウェブホストのサーバー設定のためにLOAD DATAまたはLOAD 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++; 
    } 

おかげで、このような所望の区切り文字として

+0

'fget'で行を開き、' \ tab'で爆発してください。 –

+0

このような限られたサーバがあれば、この一括挿入はタイムアウトしてしまいます。適切なホストに切り替える時間 – e4c5

+0

@ e4c5ホストは実際にはまったく問題ありません。これまでにスクリプトのタイムアウトはありませんでした。私はこのコードを15分ごとに実行し、最大500行をインポートします。これまでのところ問題ありません。 – Armitage2k

答えて

関連する問題