最初,我只需要构建一个带有三元操作链的MySQL查询字符串即可。
(isset($jsonData->type)) ? $whereStr .= " AND `ACCIDENT_TYPE` IN (:ctype)" : false;
然后在运行$queryStr
之前将其附加到$query = $readDB->prepare($queryStr)
。一时间,这很好。但是后来我发现自己需要使用LEFT JOIN
,并且不再能够将所有WHERE
子句保留在一个字符串中,因为现在我需要使用单独的ON
子句而不是单个{{1 }}子句。
起初,我以为我会尝试一下:
WHERE
您可以想象,这没有用。由于(isset($jsonData->type)) ? $whereStr .= $accidentOnStr .= " AND `ACCIDENT_TYPE` IN (:ctype)" : false;
运算符的工作原理,$whereStr
将以重复的值结束。
还有其他方法可以建立两个单独的字符串变量,在同一行中共享相同的子字符串吗?还是我被迫使用多行.
语句来实现这一目标?
答案 0 :(得分:1)
一种您可以做的(棘手的)方法是使用array_map
将字符串添加到每个变量中,并将其传递给变量的引用数组。例如:
$a = 'a string';
$b = 'b string';
$c = true;
$c ? array_map(function (&$v) { $v .= " c string";}, [&$a, &$b]) : false;
echo "$a\n$b\n";
输出:
a string c string
b string c string