ist der Fehler, den ich bekomme, wenn ich versuche, Produkte zu importieren direkt an die Prestashops Datenbank mit externer SkriptPhp-Dateien Zeichensatzcodierung - fgetcsv? Diese
array(2) { [0]=> string(4) "Spol" [1]=> string(1) "?" }
Fatal error: Uncaught You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1
INSERT INTOthrown in ...../Db.php on line 765ed_feature_product
(id_feature
,id_product
,id_feature_value
) VALUES (1, 313,)
Also muß ich grundsätzlich prüfen, ob in einer CSV-Datei ein Produkt mit einer ID gleich der ist eine in der Datenbank. Wenn es nicht einen gibt, muss ich es direkt zu einer Datenbank hinzufügen. Ich habe alles richtig gemacht und wenn es keine kroatischen Zeichen gibt, funktioniert alles wie ein Zauber. Das Problem ist, wenn das Skript auf kroatische Zeichen trifft (è, ć, ž, š, đ,,, Ć, Ž, Š, Đ). Es ist als ob es sie nicht erkennt.
I.e die erste Zeile des Zitats ist die Sache, die ich var_dumped auf dem Bildschirm. Wenn ein Fragezeichen vorhanden ist, sollte das Zeichen "Ž" ausgegeben werden.
Es ist eindeutig nicht so Ž erkannt, da es Fehler wirft, da ich verwende, dass singen alle id_feature_value wo Wert = Ž (in diesem Beispiel) auszuwählen. Da ich die prestashops Datei config.inc.php in dieses Skript einfüge, wird charset wie der Header auf utf-8 gesetzt.
Vielleicht ist es nicht richtig gemacht, wo kann ich es überprüfen? Wenn es ist, was dieses Problem verursacht und wie kann ich es lösen
P.S. Ich denke, das Problem ist, dass ich fgetcsv benutze, um die ganze CSV-Datei zu lesen, und es nicht erkennt, dass es codiert und deshalb seltsame Zeichen ausgibt, anstatt die richtigen kroatischen Zeichen auszugeben. Was könnte eine Lösung für dieses Problem sein?
P.P.S Auf Anfrage Importfunktion:
function CSVToArray() {
$arr = [];
if (($fp = fopen('csv/products.csv', 'r')) !== FALSE) {
$i = 0;
while (($data = fgetcsv($fp, 10000, ";")) !== FALSE) {
$arr[$i]['reference'] = $data[0];
$arr[$i]['naziv'] = utf8_decode($data[1]);
$arr[$i]['price'] = $data[2];
if (empty($data[3])) {
$arr[$i]['quantity'] = 0;
} else {
$arr[$i]['quantity'] = $data[3];
}
$arr[$i]['kat_naziv'] = array_map('trim', explode(',', utf8_decode($data[4])));
$arr[$i]['slika'] = $data[5];
$arr[$i]['spol'] = utf8_decode($data[6]);
$i++;
}
fclose($fp);
}
return $arr;
}
Können Sie bitte Ihr Import-Skript hinzufügen? Oder nur den Teil, wo Sie die Datei lesen und analysieren. –
Ich sehe gerade, dass ich utf8_decode aus irgendeinem Grund verwendet habe und vielleicht liegt das Problem dort. –
1) Ich sehe, dass Sie sowohl utf8_decode() als auch nicht-lateinische Zeichen haben. Das kannst du einfach nicht tun. 2) Wenn Daten einen SQL-Syntaxfehler verursachen können, ist Ihr Code anfällig für SQL-Injection. –