0

私はZendFrameworkを学んでいて、データベースの不便さを乗り越えています。

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()必要な回数だけメソッドを呼び出すことができる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 に答える