这是我尝试使用外部脚本将产品直接导入Prestashops数据库时出现的错误
array(2){[0] => string(4)“Spol”[1] => string(1)“?” }
致命错误:未捕获您的SQL语法出错; 检查与您的MySQL服务器版本对应的手册 正确的语法在第1行左边的')'附近使用
INSERT INTO..... / Db.php在第765行ed_feature_product
(id_feature
,id_product
,id_feature_value
) VALUES (1, 313, )
所以我基本上要检查csv文件中是否有一个id等于数据库中的id的产品。如果没有,我必须将其直接添加到数据库。我做的一切都是正确的,当没有克罗地亚标志时,一切都像魅力一样。问题是当剧本遇到克罗地亚标志时(č,ć,ž,š,đ,Č,Ć,Ž,Š,Đ)。就像它不认识它们一样。
即引号的第一行是var_dumped到屏幕的东西。如果有问号标志,它应该输出“Ž”标志。
它显然不被识别为Ž,因为它会抛出错误,因为我正在使用它来选择所有 id_feature_value 其中 value =Ž(在此示例中) 。由于我将prestashops config.inc.php文件包含在此脚本中,因此字符集的字符集设置为utf-8。
也许它没有正确完成,所以我可以在哪里查看? 如果它是造成这个问题的原因,我该如何解决呢
P.S。我认为问题在于我使用fgetcsv来读取整个csv文件并且它不识别它的编码因此输出奇怪的符号而不是输出propper克罗地亚标志。什么可以解决这个问题?
P.P.S 请求导入功能:
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;
}
答案 0 :(得分:1)
我真的使用utf8_decode()
在不需要的地方弄乱了这个,这引起了我的头疼。