2011-02-23 121 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'"