将用户输入的布尔搜索字符串转换为mySQL

时间:2016-06-16 00:22:46

标签: php mysql

我有一个数据库搜索字段,我希望用户能够输入简单的布尔逻辑并将其转换为mySQL搜索字符串。

例如,如果用户输入:(php AND mysql) OR ajax

我希望将其转换为:

((c.Skillset LIKE '%php%' AND c.Skillset LIKE %mysql%) OR c.Skillset LIKE '%ajax%')

有这么简单的方法吗?我在为括号提出解决方案时遇到了特别的麻烦,如果不是这样的话,那将非常简单。

1 个答案:

答案 0 :(得分:1)

以下假设您定义了一个名为SQL_PREFIX_STRING的常量。

$string = '(php AND mysql) OR java';
preg_match_all('/[a-z]+/', $string, $skills); // puts the skills in an array
$skills = $skills[0]; // shift array to get the matching values
array_walk($skills, function (&$skill) {$skill = '%'.$skill.'%';}); // add wildcards to parameters

$query_string = preg_replace('/[a-z]+/', 'c.Skillset LIKE ?', $string); // create the ? parameters for the SQL string

$pdoStatement = $pdo->prepare(SQL_PREFIX_STRING.$sql); // prepare
$pdoStatement->execute($skills); // execute