2011-02-23 106 views
0

匹配字符串变量和MySQL字段的正确查询是什么? 例如:Mysql REGEX匹配查询

$var_surname = $_POST['surname']; 
$var_surname = strtolower($var_surname); 

SELECT surname FROM tblname WHERE LOWER(surname) REGEX $var_surname 
.......... 
.......... 

if($check > 0) 
{ 
    Surname already exists 
} 
else 
{ 
    Successful 
} 

任何帮助将不胜感激。

+1

我希望你在将'$ var_surname'插入到SQL之前就这样消毒! – 2011-02-23 15:33:20

+2

事实上,即使您正在对其进行清理,在数据库服务器上运行用户提供的正则表达式也会要求进行DoS攻击。这也意味着您必须在不影响正则表达式的情况下对SQL进行清理。永远不要简单地相信你从$ _POST得到什么,从客户端查看和编辑它是微不足道的。 – 2011-02-23 15:40:38

+1

@Justin我希望我可以把你的评论100x放大。 – Donut 2011-02-23 15:41:26

回答

1

REGEX是不是一个有效的MySQL运营商,它的REGEXP

SELECT surname FROM tblname WHERE LOWER(surname) REGEXP '$var_surname'; 

然而,REGEXP看起来像它的矫枉过正在这种情况下 - 的LIKE操作或简单平等测试应该很好地工作:

SELECT surname FROM tblname WHERE LOWER(surname) LIKE '$var_surname'; 

或者:

SELECT surname FROM tblname WHERE LOWER(surname) = '$var_surname'; 

请使用消毒$var_surname然后再在查询中使用它 - 使用mysql_real_escape_stringPrepared Statements

+0

尝试LIKE和=不验证。记住我正在使用字符串。 – 2011-02-23 15:44:12

+0

@Frank如何创建'$ var_surname'? – Donut 2011-02-23 15:46:14

+0

@Frank:LIKE和=应该都在MySQL字符串值上工作。你有没有尝试验证你的数据库服务器上的'SELECT surname FROM tblname WHERE LOWER(surname)='test';'?验证失败可能不是来自您认为的地方。 – 2011-02-23 17:15:51

1

我不明白,你为什么要用REGEX(应该是REGEXP)?只是做

"SELECT surname FROM tblname WHERE LOWER(surname) = '$var_surname'"