php - Php解析文本块以进行查询

  显示原文与译文双语对照的内容

我正在尝试为搜索编写mysql查询,该查询基于以下搜索。 搜索查询字符串:"( foo和 bar ) 或者( blah1和 blah2 )"

用户将输入查询字符串,它可能是单个块,也可能是多个块。

我要做的是将字符串分割成括号,单独解析它们,然后将它的与 OR 或者 AND 语句组合。

所以我的结束查询看起来像


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);

...