Php解析文本块以进行查询
我正在尝试编写基于以下搜索的mysql搜索查询。 搜索查询字符串:foo和bar或blah1和blah2 用户将如上所述输入查询字符串,它可能是单个块或多个块 我要做的是将字符串拆分为一块方括号,分别解析它们,然后将其与OR语句组合 所以我的最终查询看起来像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
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);