2011-02-08 23 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