我有一个数据库搜索字段,我希望用户能够输入简单的布尔逻辑并将其转换为mySQL搜索字符串。
例如,如果用户输入:(php AND mysql) OR ajax
我希望将其转换为:
((c.Skillset LIKE '%php%' AND c.Skillset LIKE %mysql%) OR c.Skillset LIKE '%ajax%')
有这么简单的方法吗?我在为括号提出解决方案时遇到了特别的麻烦,如果不是这样的话,那将非常简单。
答案 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