我正在学习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');
}