我的查询中有一个MySQL语法错误。它是使用几个变量构建的。
$gender = 'x';
$hepsi = implode(',', [198,201,NULL,199]);
$be = implode(',', [NULL,202,NULL]);
$ulke = 'Turkey';
mysql_query("SELECT * FROM uyeler
where basresvar='evet'
AND cinsiyet='".$gender."'
AND kesfetgoster='evet'
AND id NOT IN (".$hepsi.")
ORDER BY FIELD (kesfetbegendikleri, '".$be."') > 0, ulke = '".$ulke."', id
DESC limit 10")
最后的查询是:
SELECT * FROM uyeler
where basresvar='evet'
AND cinsiyet='x'
AND kesfetgoster='evet'
AND id NOT IN (198,201,,199)
ORDER BY FIELD (kesfetbegendikleri, ',202,') > 0, ulke = 'Turkey', id
DESC limit 10
数组中的空值在查询中产生两个连续的逗号,生成一个错误:
您的SQL语法有错误;查看与MariaDB服务器版本对应的手册,了解在"199"ORDER BY FIELD(kesfetbegendikleri,",202,")附近使用的正确语法>0,ulke='土耳其',id DESC'在第1行
如何防止此错误?
正如评论中所讨论的,$hepsi
的值(198201199)中的逗号是问题所在。因此,如果您使用现有数组中的implode
创建该字符串,那么您可以使用array_filter
来删除空数组元素,类似于以下内容:
$hepsi = implode(',' array_filter($your_array));
如果$hepsi已经存在,那么只使用explode
,再次应用array_filter
和implode
。像这样:
$hepsi = implode(',', array_filter(explode(',', $hepsi)));