程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> Mysql中“_” 的搜索問題

Mysql中“_” 的搜索問題

編輯:關於MYSQL數據庫
 真是寒啊~
如果不是 Babyken 的提醒,這個錯誤我想我還會一直犯下去。

事情起因,幫 Babyken 做了一個 0day 查詢的腳本,腳本很簡單,就是簡單的取用戶輸入的值做 LIKE 操作查詢數據庫。做好後經測試一直運行很好。可是今天 Babyken 告訴我說有個BUG,輸入 "___" 或 ".__" 等類似的關鍵字時,會把數據庫中的所有記錄都取出來。

偶又試了以前寫過的幾個應用,寒,都有這個問題。。。

看起來是SQL本身對LIKE的處理問題。問了幾個朋友也都沒有注意過。後來在MySQL手冊上找到答案:

Pattern matching using SQL simple regular expression comparison. Returns 1 (TRUE) or 0 (FALSE). With LIKE you can use the following two wildcard characters in the pattern:

Char Description
% Matches any number of characters, even zero characters
_ Matches exactly one character

當時感覺就是汗啊~~ 以前怎麼自己就沒有注意過呢?

解決辦法是把用戶的輸入中的 _ 和 % 轉義。
不知道是只是MySQL有這個問題,還是其它數據也有。希望熟悉其它數據庫應用的朋友試一下。

相關Mysql說明頁面:http://www.MySQL.com/doc/en/String_comparison_functions.Html

2004年1月16日22時25分補記:
與xdanger探討後發現,目前網上大部分的PHP+MySQL程序都存在此BUG,IPB和PHPBB也不例外,VBB中被過濾掉了。看起來這應該是一個值得引起重視的問題了。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved