如何解决我的查询中缺少数组项导致的 MySQL 语法错误?
Posted
技术标签:
【中文标题】如何解决我的查询中缺少数组项导致的 MySQL 语法错误?【英文标题】:How can I resolve a MySQL syntax error from missing array item in my query? 【发布时间】:2016-07-22 01:16:03 【问题描述】:我的查询中有一个 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 = 'Turkey', id DESC ' at line 1
如何防止出现此错误?
【问题讨论】:
$hepsi
的值是多少?
你不能有那个额外的逗号。只需将空值替换为 0。
如何使用 str_replace(",,",",,$value)
从数组中获取逗号分隔值的位置
@user198989 如果数组中的最后一项为空,这将无济于事。后面会有一个逗号。
【参考方案1】:
正如 cmets 中所讨论的,$hepsi
的值 (198,201, ,199) 中的逗号是问题所在。因此,如果您使用 implode
从现有数组创建该字符串,那么您可以使用 array_filter
删除空数组元素,如下所示:
$hepsi = implode(',' array_filter($your_array));
如果 $hepsi 已经是现有字符串,那么只需 explode
它,再次应用 array_filter
和 implode
它。像这样:
$hepsi = implode(',', array_filter(explode(',', $hepsi)));
【讨论】:
以上是关于如何解决我的查询中缺少数组项导致的 MySQL 语法错误?的主要内容,如果未能解决你的问题,请参考以下文章
如何解决此警告:“React Hook useEffect 缺少依赖项:'history'”?