0

我正在学习 Zend 框架,并且正在解决数据库带来的不便。

使用 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 对象。

4

1 回答 1

3

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');
}
于 2012-07-13T20:40:47.323 回答