Мой код работает отлично, за исключением одной строки. Он работал без каких-либо проблем с одного года, но теперь в файле есть одна строка, из-за которой мой код глючит.
Линия:
"26163796",,"85359","RDH001","30551","MDR001",349000,,"CAN",,,,"N","AI","N","O",,,,,2014/11/04,2015/06/30,"56083","C","Cousins Sud","304",,"Imp. Foucher",,"J3B8V3","4318433 Cadastre du Québec","O",2002,,,,,,,,,,,,"30 jours","30 days",,,,,,,"A.I.SEUL","R","PP","IS",,,,2001,,,49,35,,"P",,,,,,49.20,121.40,,"P",8858.70,"PC",,2014,80000,233200,12,4,2,2,2,0,"MT26163796.jpg","6292",,,,,,,,,,,,"Stores, rideaux, pôles, luminaires, lave-vaisselle, porte-poussière électrique, système de son au rez-de-chaussée, projecteur et colonne de son, véranda extérieur, chauffe-eau de piscine, paiement déjà fait pour ouverture de piscine au printemps, piscine récente..suite à l'addendum.","Blinds, curtains and rods, light fixtures, dishwasher, electric dust holder, sound system on main floor, projector and speakers, exterior veranda, water heater for pool, (payment has been done for opening of the pool next Spring.)see addendum...","Réservoir au propane loué $12/mois","Gas tank rented $12/month",,,,,,,,,"O",2015/01/06 01:17:29,,"EV",,,,,,,,,,,,,,,,,"http://passerelle.centris.ca/redirect.aspx?CodeDest=REMAX%26NoMLS=MT26163796",,,"80508","RDD001",,,,,,,,45.29035900,-73.26586700,,,,,,
Код:
while (($data = fgetcsv($handle, 1000, ',')) !== false) {
$num = count($data);
$row++;
$values = '';
for ($c = 0; $c < $num; $c++) {
$values .= "'" . mysql_real_escape_string($data[$c]) . "', ";
}
if ($tableName == 'inscriptions') {
echo ($num) . "\n";
}
$values = substr($values, 0, -2);
$query = "INSERT INTO `" . $tableName . "` ( $columns ) VALUES ( $values )";
$this->_logFile[] = $query;
mysql_query($query) or die('SQL ERROR:' . mysql_error() . ' : ' . $query);
unset($values);
}
На самом деле, предложение: «Магазины, виллы, столбы, светильники, электрическая лавка, электрическая система, система сыновей, семья, архитектор и сын, венгерская компания, шофер, писец, швейцарская семья au printemps, piscine récente..suite à l’addendum. « разделяется на запятую и делает мой SQL-запрос недействительным.
Любая идея, пожалуйста?
Хорошо исправлено:
public function utf8_fopen_read($fileName) {
$fc = iconv('iso-8859-1', 'utf-8', file_get_contents($fileName));
$handle = fopen("php://memory", "rw");
fwrite($handle, $fc);
fseek($handle, 0);
return $handle;
}
$fh = $this->utf8_fopen_read(self::UPLOADED_FILES_TXT . $fileName);
while (($data = fgetcsv($fh, 1000, ',')) !== false) {
$data = array_map("utf8_decode", $data);
...
}
Других решений пока нет …