在SQL Query中的用户输入变量中使用REGEX。

时间:2014-05-06 10:24:19

标签: php sql regex

我必须编写一个带有where子句的sql查询,该子句在数据库表中查找用户输入值。

说用户输入职称"科学和数学负责人"

查询应单独查找作业标题中的所有单词,并相应地返回部门列表。

$keyword =  mysql_real_escape_string($keyword);

SELECT distinct departments.name FROM departments, jobtitle_keywords 
WHERE jobtitle_keywords.keywords REGEXP   '$keyword' 
AND departments.id = jobtitle_keywords.dept_id;

此查询在理想情况下完美运行(没有特殊字符,空格等),否则无法运行

任何人都可以指导我以正确的方式逃避用户可以输入的各种特殊字符和异常,这样我的查询就不会失败。

非常感谢任何帮助。

由于

1 个答案:

答案 0 :(得分:0)

所以你的评论我假设你想从你的用户搜索输入( ie&#34;科学/数学的主管&#34; )中取出单词并且只使用单词(< em> head,of,science and math )并使用它们在jobtitle_keywords.keywords字段中搜索。

假设这是你想要/需要的:

使用simple regex确保您从查询中获取所有单词,如下所示:

$re = '/(\w+)/i'; 
$str = 'head of science / math'; 

preg_match_all($re, $str, $matches);

现在在$ matches [0]中有结果:array( "head", "of", "science", "math")Awfully simple

现在使用它来使用ANDOR创建SQL语句。您可以使用implode轻松完成。

$queryAddon = "jobtitle_keywords.keywords LIKE '%" 
   . implode ("%' AND jobtitle_keywords.keywords LIKE '%", $matches[0])
   . "%'";

给你jobtitle_keywords.keywords LIKE '%head%' AND jobtitle_keywords.keywords LIKE '%of%' AND jobtitle_keywords.keywords LIKE '%science%' AND jobtitle_keywords.keywords LIKE '%math%'

Like stealing a Childs Candy right?

所以现在把它放在你的查询中并启动它。

$query = "SELECT distinct departments.name FROM departments, jobtitle_keywords "   ."WHERE departments.id = jobtitle_keywords.dept_id "   ." AND (" . $queryAddon . ")";

这应该可以帮到你 - 如果我帮你的话。