【发布时间】:2016-10-11 08:32:51
【问题描述】:
这是我尝试使用外部脚本将产品直接导入 Prestashops 数据库时遇到的错误
array(2) { [0]=> string(4) "Spol" [1]=> string(1) "?" }
致命错误:未捕获您的 SQL 语法有错误; 检查与您的 MySQL 服务器版本相对应的手册 在第 1 行的 ')' 附近使用正确的语法
插入抛出 ...../Db.php 在第 765 行ed_feature_product(id_feature,id_product,id_feature_value) VALUES (1, 313, )
所以我基本上必须检查 csv 文件中是否有一个 id 等于数据库中的那个的产品。如果没有,我必须将其直接添加到数据库中。我做的一切都是正确的,当没有克罗地亚标志时,一切都像魅力一样。问题在于脚本遇到克罗地亚语符号(č、ć、ž、š、đ、Č、Ć、Ž、Š、Đ)时。就好像它不认识他们一样。
即引用的第一行是我 var_dump 到屏幕上的东西。如果有问号符号,它应该输出“Ž”符号。
它显然不被识别为 Ž 因为它会引发错误,因为我使用该 sing 来选择所有 id_feature_value 其中 value = Ž (在本例中) .由于我将 prestashops config.inc.php 文件包含在此脚本中,因此该脚本字符集设置为 utf-8,标题也是如此。
也许它没有正确完成,我在哪里可以检查它? 如果是导致这个问题的原因,我该如何解决它
P.S. 我认为问题在于我正在使用 fgetcsv 读取整个 csv 文件并且它无法识别它的编码,因此输出奇怪的符号而不是输出正确的克罗地亚符号。有什么办法可以解决这个问题?
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;
}
【问题讨论】:
-
您能添加您的导入脚本吗?或者只是您读取和解析文件的部分。
-
我刚才看到我出于某种原因使用了 utf8_decode,也许这就是问题所在。
-
1) 我看到你有
utf8_decode()和非拉丁字符。你根本无法做到这一点。 2) 如果数据会导致 SQL 语法错误,那么你的代码很容易受到 SQL 注入的攻击。
标签: php csv utf-8 character-encoding prestashop