2011-02-08 46 views
0

我的正則表達式foo是不是最好的,但下面不工作,我正在尋找一個小小的建議:REGEXT在MySQL查詢

$query = $_GET['indicator']; 
// given: 239,240 or 240,239 or 238,239,240 
// and: 239, 240 or 240, 239 or 238, 239, 240 
// and: 239 
// we need to check for start+number+puntuation(1), punctuation+number+end(2), punctuation+number+punctuation(3) 
//             space+number+end(4),  space+number+punctuation(6) 
//      start+number+end(6) 
$sql = 'SELECT * from reports WHERE dataSetIDs REGEXP \''; 
$sql .= '^'.$query.'[:punct:]|';   // 1 
$sql .= '[:punct:]'.$query.'$|';   // 2 
$sql .= '[:punct:]'.$query.'[:punct:]|'; // 3 
$sql .= '[:space:]'.$query.'$|';   // 4 
$sql .= '[:space:]'.$query.'[:punct:]|'; // 5 
$sql .= '^'.$query.'$\'';     // 6 
$result = mysql_query($sql); 

查詢正在注視哪個具有CSV特定的細胞格式化的一組數字格式沒有設置(即逗號後面可能有空格)。我得到的只有一個條目的行...但不是在csv中有數字的行。

任何指針非常讚賞。

乾杯,

大教堂

+0

-1 SQL注入漏洞:看http://stackoverflow.com/questions/332365/xkcd-sql-injection-please-explain(但出票) – Johan 2011-05-28 20:51:10

回答

1

主頻它:

$query = mysql_real_escape_string($_GET['indicator']); 
$sql = 'SELECT title from reports WHERE dataSetIDs REGEXP \'(^|[:,:]|[: :])'.$query.'([:,:]|[: :]|$)\''; 
$result = mysql_query($sql); 

感謝您的幫助@VGE。

乾杯,

大教堂

1
  1. 你爲什麼不爆炸的CSV?

  2. 可以推崇在數據庫中的CSV內容和您的查詢輸入:

    1. 刪除所有無用的空間
    2. 使用相同的分隔符「」作爲一個例子
    3. 在添加delimier開始和結束前:

      200,300 =>,200300,

    4. 使用正規像」, $ ID「,這是簡單的

+0

嗨@VGE,即使有理智檢查數據庫中的字段我一直在尋找分隔符在開始,末尾或兩者都不存在的情況下被卡住的情況,我認爲這種情況是存在的。說我在找23我會在23和234,456找到它,如果我使用LIKE條件,這就是爲什麼我在查看MySQL REGEXP條件。數據庫沒有被設置在石頭上,但是與其他人一起工作也有點麻煩... – annoyingmouse 2011-02-08 13:49:49