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";