我正在学习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对象。
答案 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');
}