【问题标题】:Can you help me with this foreach loop?你能帮我解决这个foreach循环吗?
【发布时间】:2018-07-10 17:12:08
【问题描述】:
$cat_id=$_GET['cat_id'];
$catEx = explode(' ',$cat_id);
foreach($catEx as $exCat)
{
    $looped .= 'ad_cat LIKE'.' '.'%'."$exCat".'%'.' OR '.'ad_title LIKE'.' '.'%'."$exCat".'%'.' OR '.'ad_sub_cat LIKE'.' '.'%'."$exCat".'%'.' OR '.'ad_description LIKE'.' '.'%'."$exCat".'%' ;
}

我需要这样做,以便搜索栏搜索多个单词。

【问题讨论】:

  • 样本输入是什么?使用该输入的当前结果是什么?使用该输入的期望结果是什么?
  • 哇,这是一个令人困惑的字符串。我有一种感觉,你的变量没有被正确引用。使用准备好的语句将对此有所帮助。
  • 删除所有的连接,你的字符串变成$looped .= 'ad_cat LIKE %$exCat% OR ad_title LIKE %$exCat% OR ad_sub_cat LIKE %$exCat% OR ad_description LIKE %$exCat%' ;。正如您在此处看到的,您的变量没有被引用。您可以保留我粘贴的字符串,只在变量/占位符周围添加双引号,或者使用准备好的语句,这样您就不必再担心引用问题了。
  • @aynber 但是解决引用问题太有趣了!!! ;)
  • @IncredibleHat 你和我对乐趣的定义截然不同。 ;-) 哈哈

标签: php mysql database search


【解决方案1】:

在每组类似条件周围添加括号,以便在每列中检查每个值。

$cat_id=$_GET['cat_id'];
$catEx = explode(' ',$cat_id);
foreach($catEx as $exCat) {
    $looped .= "(ad_cat         LIKE '%$exCat%' OR 
                 ad_title       LIKE '%$exCat%' OR 
                 ad_sub_cat     LIKE '%$exCat%' OR 
                 ad_description LIKE '%$exCat%') OR ";
}
$looped = trim($looped,' OR '); //just added some spaces

【讨论】:

    【解决方案2】:

    正如@aynber 在 cmets 上所说,使用 sprintf

     sprintf ( 'column like "%%s%" or column like "%%s%"', 'string', 'string');
    

    【讨论】:

    • 哇,我从来没有说过 sprintf。我说的是准备好的陈述。不是一回事。
    • 还只是回答别人的评论有点粗鲁……尤其是当它甚至不是他们所说的时候;)
    【解决方案3】:

    你可以试试这个代码

    $cat_id=$_GET['cat_id'];//cute cat
    $catEx = explode(' ',$cat_id);
    $looped = [];
    foreach($catEx as $exCat) {
        $looped[] = "ad_cat         LIKE '%$exCat%' OR 
                     ad_title       LIKE '%$exCat%' OR 
                     ad_sub_cat     LIKE '%$exCat%' OR 
                     ad_description LIKE '%$exCat%'";
    }
    echo implode(" OR ",$looped);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-11
      • 2021-08-29
      • 2022-12-15
      • 2011-01-24
      • 2021-08-14
      • 2021-01-28
      • 2013-01-28
      • 1970-01-01
      相关资源
      最近更新 更多