上面的问题^^^^^没有正确的答案
因为该问题中接受的答案导致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子句(使用key = value ...也称没有子查询)分解为有用的数组吗? 类似的东西:
x= array(
array('a' => 'b' , 'b' => 'c'),
array('d' => 'g' , array(array('a' => 'f'),array('x' => '6')),
);
其中AND在一个数组中或在新数组中
或任何其他格式,只是为了能够将整个查询重建为我想要的任何内容。
这里有足够的preg_match吗?
答案 0 :(得分:1)
Per @Jack's comment,SQL解析器在这里有意义。例如,使用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);
答案 1 :(得分:0)
我用于codeigniter框架的以下函数 - 用于更新表
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
}
}