我想使用动态填充的条件来执行SELECT查询。
if($_POST['a']=='true'){
$a = 'a,';
$a_where = 'a >0';
}
if($_POST['b']=='true'){
$b = 'b,';
$b_where = 'b >0';
}
if($_POST['c']=='true'){
$c = 'c,';
$c_where = 'c >0';
}
比我想在哪里做
$where = 'WHERE '.$a_where.' OR '.$b_where.' OR '.$c_where;
然后查询
$query = mysql_query('SELECT id,'.$a.$b.$c.'date FROM t_name '.$where.' ORDER BY date DESC');
问题是如果b
或a
不是POST而不是我在查询中出错。实际上,这里只有WHERE子句是问题。
答案 0 :(得分:0)
与其将as作为单独的变量构建起来,不如将它们作为数组收集起来更容易,对列名和where子句的部分都执行此操作,然后使用implode()
来构建完整的SQL ... < / p>
$columns = [ 'id', 'date' ];
$where = [];
if($_POST['a']=='true'){
$columns[] = 'a';
$where[] = 'a >0';
}
if($_POST['b']=='true'){
$columns[] = 'b';
$where[] = 'b >0';
}
if($_POST['c']=='true'){
$columns[] = 'c';
$where[] = 'c >0';
}
$sql = 'SELECT '.implode(",", $columns).'
FROM t_name
WHERE '.implode(" or ", $where).'
ORDER BY date DESC';