2

首先,我有一个数组,它通过 switch 语句传递,以匹配每个值的正则表达式,然后根据它是否匹配执行查询。我的问题是,如果数组包含 1 个或多个与正则表达式之一匹配的值,我想要定义的查询来过滤为该数组执行的任何过去或未来查询的结果,我正在考虑 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;
    };
4

1 回答 1

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的东西。

于 2013-04-17T18:37:07.890 回答