2013-07-09 23 views
1

上面的问题^^^^^没有正确答案pregmatch打破where子句

在这一问题的答案接受导致MYSQL页面打散查询,我仍然需要在PHP中的解决方案和在这个问题中提供的答案中的链接实际上是我需要的。

我想在SQL打造出来的where条款的有用阵列

那么让我们来承担这些:

where a=b and b=c or d=g and (a=f or x=6)

where a=b and b='d and f' or d=g and (a=f or x=6)

where a=b and b="d and f (or just text)" or d=g and (a=f or x=6)

where "a"=b and b ="Note that colum names might be quoted differently in different databases" or d=g and (a=f or x=6)

where "a"='b' and b ="as well as values" or d=g and (a=f or x=6)

where "a"='b' and b ="multiple levels" or d=g and (a=f or x=6 or (x=5 and v=7))

我想尝试和突破任何where子句(与关键=值...又名无子查询)到也许有用的阵列? 类似:

x= array(
array('a' => 'b' , 'b' => 'c'), 
array('d' => 'g' , array(array('a' => 'f'),array('x' => '6')), 
); 

其中和是一个数组或新数组

或任何其他形式,只是为了能够重建到任何我想要整个查询。

preg_match在这里足够了吗?

+0

有什么用此之外的家庭作业的? – BLaZuRE

+0

@Ronan Dejhero每个人都有哪些个人问题? – ripa

+1

SQL分析器在这里会更有意义。 –

回答

1

@Jack's comment,一个SQL pa rser在这里是有意义的。例如,使用PHP SQL Parser

$sql = 'where a=b and b=c or d=g and (a=f or x=6)'; 

require_once('php-sql-parser.php'); 
$parser = new PHPSQLParser(); 
$parsed = $parser->parse($sql); 
print_r($parsed); 
+0

请只关闭对重复,我们已经在这个网站上有这个答案,每个评论的链接就足够了恕我直言,以保持直的东西:http://stackoverflow.com/a/12109334/367456 – hakre

+0

@hakre:我质疑这是否真的是一个骗局;问题提出了不同的问题 - 这个问题是关于解析一个特定的子语句,而另一个问题是关于解析整个命令。尽管两者都可以使用相同的工具完成,但从相关答案中并不明显。 – eggyal

+0

那就是我需要的!多谢兄弟 –

0

的下面功能我已经用于我的笨框架 - 一种用于更新表

function updateCT($options = array(),$where=array()) 
{ 
    // required values 
    if(!$this->_required(
     array('id'), 
     $where) 
    ) return false; 

    // set values for updating 
    foreach($options as $key=>$val) 
    { 
     $this->db->set($key,$val); 
    } 

    // set where clause for updating 
    foreach($where as $key=>$val) 
    { 
     $this->db->where($key,$val); 
    } 

    $this->db->update(TBL_COMPANY_TYPE); 
    return $this->db->affected_rows(); 
} 

为了限定条件和条款阵列格式将是象下面这样: -

$options=array(
       'key1'=>array('val1' , 'and'), 
       'key2'=>array('val2' , 'or'), 
      ); 

现在处理数组如下所示: -

foreach($options as $key=>$val) 
{ 
    foreach($val as $value=>$condition) 
    { 
     // now write sql format as your framework 
    } 
} 
+2

这是如何帮助解析从现有SQL字符串的WHERE子句到数据结构,比如OP是在哪里(这是这个问题是什么问题,我的阅读)? – eggyal

+0

@eggyal我认为OP正试图解析一个数组并处理该数组以形成“where”子句。 OP希望避免手动创建where子句。我上面的代码将作为一个通用函数工作...但到目前为止,上述功能在研发阶段。我需要做这个功能很多更新... – ripa

+0

@ripa:如果我不读的问题错了,相反的情况。如果您也在研发现有解决方案。他们可能会告诉你如何做事情的更好方法(并且可能已经可用)。很好的学习*和*完成任务。 – hakre