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++;
}
感謝
用'fget'命令行並用'\ tab'分解 –
那麼如果你有這樣一個有限的服務器,這個批量插入就肯定會超時。時間切換到合適的主機 – e4c5
@ e4c5主機實際上是非常好的,到目前爲止沒有任何腳本超時。我每15分鐘運行一次該代碼並導入最多500行,到目前爲止沒有問題。 – Armitage2k