ZendSelect()在声明后添加大小写



我正在学习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对象。

是的,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');
}

最新更新