Zend Select()在声明后添加案例?

时间:2012-07-13 20:39:33

标签: zend-framework

我正在学习Zend Framework,我正在解决数据库方面的不便。

使用php你可以像这样做一些字符串操作

$sqlstatement = "select id,name from TABLE where ID='$id'";

if ($admin == true) {
$sqlstatement .= " and admin = 'Yes'";  
}

有没有办法用Zend做到这一点?目前我正在做这样的事情。

if ($admin == true){

   $sqlstatement = $this->select()
                        ->from($this->_name,array('id','name'))
                        ->where("ID='$id'")
                        ->where("admin = 'Yes'");

}else{

   $sqlstatement = $this->select()
                        ->from($this->_name,array('id','name'))
                        ->where("ID='$id'");
}

理想情况下,我想做点什么...

   $sqlstatement = $this->select()
                        ->from($this->_name,array('id','name'))
                        ->where("ID='$id'");
if ($admin == true){
       $sqlstatement .= $this->select()
                             ->where("admin = 'Yes'");
}

我有一个模型创建查询并将它们返回到我的视图。所以$ this-> select()实际上发生在我的模型类函数中并返回Zend_Db_Table_Row对象。

1 个答案:

答案 0 :(得分:3)

是的,select()会返回您可以根据需要多次调用方法的select对象,因此:

$sqlstatement = $this->select()
                     ->from($this->_name,array('id','name'))
                     ->where("ID='$id'");
if ($admin == true){
       $sqlstatement->where("admin = 'Yes'");
}

你也应该使用参数化查询来避免SQL注入,所以我会把这段代码重写为:

$sqlstatement = $this->select()
                     ->from($this->_name, array('id','name'))
                     ->where('ID= ?', $id);
if ($admin){
       $sqlstatement->where('admin = ?', 'Yes');
}