Php解析文本块以进行查询

Php解析文本块以进行查询,php,mysql,Php,Mysql,我正在尝试编写基于以下搜索的mysql搜索查询。 搜索查询字符串:foo和bar或blah1和blah2 用户将如上所述输入查询字符串,它可能是单个块或多个块 我要做的是将字符串拆分为一块方括号,分别解析它们,然后将其与OR语句组合 所以我的最终查询看起来像 Select * from table where (field like 'foo%' AND field like 'bar%') OR (field like 'blah1%' AND field like

我正在尝试编写基于以下搜索的mysql搜索查询。 搜索查询字符串:foo和bar或blah1和blah2

用户将如上所述输入查询字符串,它可能是单个块或多个块

我要做的是将字符串拆分为一块方括号,分别解析它们,然后将其与OR语句组合

所以我的最终查询看起来像

Select 
  * 
from 
  table 
where 
  (field like 'foo%' AND field like 'bar%') OR 
  (field like 'blah1%' AND field like 'blah2%')  

请帮助。

有几个问题

您需要将查询字符串分解为单独的元素,然后将这些元素分解为单独的值,然后构建查询

您还需要通过转义或使用prepared语句使输入安全

使用mysqli使用准备好的语句,如下所示:-

$query_string = strtolower("(foo and bar) or (blah1 and blah2)");

$queries_sets = explode(' or ', $query_string);

$query_set = array();
$fields = array();

foreach($queries_sets AS $query_set_key=>$query_set_value)
{
    $query_line = explode(' and ', trim($query_set_value, '()'));
    if (count($query_line) == 2)
    {
        $query_set[] = "(field like ? AND field like ?)";
        $fields[] = $query_line[0].'%';
        $fields[] = $query_line[1].'%';
    }
}

$stmt = $conn->prepare("SELECT * FROM table WHERE ".implode(' OR ', $query_set));
call_user_func_array(array($stmt, 'bind_param'), $fields);