首先,我有一个数组,我通过一个switch语句,匹配每个值的正则表达式,然后根据它是否匹配执行查询。我的问题是,如果数组包含一个或多个匹配其中一个正则表达式的值,我想要定义的查询来过滤对该数组执行的任何过去或将来的查询的结果,我正在考虑INTERSECT SQL命令但是不能想想如何实现,因为我不知道将匹配多少案例,我不想添加if / else语句的负载。
以下是我目前的代码示例:
$dataArray = explode(',', $data)
$query = mysqli->prepare("SELECT * FROM table WHERE ? Like ?")
foreach ($dataArray as $key => $value) {
switch ($value) {
case preg_match('/(^abcd)/', $value):
$query->bind_param("ss", $var1, $var2);
break;
... More cases ...
default:
$query = bind_param("ss", $var3, $var4);;
break;
};
答案 0 :(得分:1)
我认为您无法prepare
查询此类要求。您必须生成即席查询(或至少其WHERE
部分)。
像:
$conditions = array();
foreach ($dataArray as $key => $value)
{
if (preg_match('/(^abcd)/', $value))
{
$conditions[] = "$var1 LIKE $var2";
}
if (preg_match('/(^efgh)/', $value))
{
$conditions[] = "$var3 LIKE $var4";
}
...
}
$sql = "SELECT * FROM table WHERE " . implode(" AND ", $conditions);
我不确定您是否允许一个$value
匹配多个模式。我也不知道,如果你想用$key
来做某事。