如何解决我的查询中缺少数组项导致的 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_filterimplode 它。像这样:

$hepsi = implode(',', array_filter(explode(',', $hepsi)));

【讨论】:

以上是关于如何解决我的查询中缺少数组项导致的 MySQL 语法错误?的主要内容,如果未能解决你的问题,请参考以下文章

缺少文件或程序集 MySql.Data 或依赖项

JBOSS 7 MYSQL 缺少依赖项错误

如何解决此警告:“React Hook useEffect 缺少依赖项:'history'”?

React Hook useEffect缺少依赖项。包括它们或删除依赖项数组

MYSQL 查询慢 SELECT DISTINCT

不迭代时如何解决数组中元素的eslint缺少关键道具?