Php 向字符串添加运算符条件时出现问题

Php 向字符串添加运算符条件时出现问题,php,Php,我需要在查询字符串之间添加和或或。我的条件如下: 第一种情况: 在这种情况下,我需要 “(月(b.day)=“10月”和年(b.day)=“2020”)或b.信息,如“%2020年10月%” 第二种情况: $array = [ "month" => "October", "information => "October 2020" ]; 在这种情况下,我需要 “(月(b.日)=‘10月’)或b.

我需要在查询字符串之间添加
。我的条件如下:

第一种情况: 在这种情况下,我需要

“(月(b.day)=“10月”和年(b.day)=“2020”)或b.信息,如“%2020年10月%”

第二种情况:

$array = [
    "month" => "October",
    "information  => "October 2020"
];
在这种情况下,我需要

“(月(b.日)=‘10月’)或b.信息,如'%2020年10月%”

我尝试了以下代码行,但无法正确修复AND或in

    $whereStr = '';
    $alias = "b.";
    $orCounter = 0;
    $andCounter = 0;
    $dateMonth = false;

    if (array_key_exists('year', $array) && array_key_exists('month', $array)) {
        $dateMonth = true;
    }

    foreach ($array as $key => $value) {
        if (0 !== $orCounter) {
            $whereStr .= ' OR ';
        } elseif ($andCounter > 0 && true === $dateMonth) {
            $whereStr .= ' AND ';
        }

        if ('month' === $key || 'year' === $key) {
            ++$andCounter;
            echo $andCounter;
            $whereStr .= strtoupper($key) . '(' . $alias . 'day' . ')';
            $whereStr .= "= '$value'";

            if ($andCounter === 2) {
                ++$orCounter;
            }

            continue;
        }

        if ('type' === $key) {
            $whereStr .= "$alias$key IN ($value)";
            continue;
        }
        $whereStr .= "$alias$key LIKE '%$value%'";
        ++$orCounter;
    }

有人能帮我解决这个问题吗?

只要使用简单的if-else条件为什么要使用循环

$where ='';
if(isset($array['month']) &&  isset($array['year']) &&  isset($array['information'])){
 $where  = '(MONTH(b.day) = '".$array['month']."' and YEAR(b.day) = '".$array['year']."' ) or b.information like "%'.$array['information'].'%" ';
}else if(isset($array['month']) &&  !isset($array['year']) &&  isset($array['information']))
{
 $where  = '(MONTH(b.day) = '".$array['month']."' ) or b.information like "%'.$array['information'].'%" ';
}

它使用阵列更干净:

$AND[] = "`fieldA` = 'Bar'";
$AND[] = "`fieldB` = 'Foo'";
$andString = implode(' AND ',$AND);
$andString是

`fieldA` = 'Bar' AND `fieldB` = 'Foo'
所以你的代码可以

$qq = "SELECT * from foobar WHERE $andString";

信息
键始终存在?是的,它始终存在如果您正确粘贴了代码,那么您构建的数组不正确,尤其是“信息”元素。这是您的条件范围吗?您可以简单地使用一种逐步下降的方法,实际上不需要循环。如果
信息
始终是
条件,只需将其附加在末尾即可。但是要小心,通常需要使用占位符,而不是直接在查询中注入值。
$qq = "SELECT * from foobar WHERE $andString";