Zend_Db_Expr

1159 ワード

zendframeworkでDbクラスを使用すると、フレームワークが自動的にsql文に引用符を付けてデータベース攻撃を防ぐため、zend dbクラスでmysqlの内蔵関数(メソッド、ストレージプロシージャなど)を使用できないという問題が発生します.zendフレームワークにはクラスZend_が用意されていますDb_Exprでは、このようなコンストラクション関数は、フレームワークに変換されたタイプに引用符を付けないように指示します.
    public function setBatchDelete($orderIds) {
        $flag = YCL_Order::FLAG_DELETED;
        $updateTime = time();
        $data = array(
            'flag' => new Zend_Db_Expr("flag | $flag"),
            'update_time' => $updateTime
        );   
        $db = $this->getAdapter();
        $where = $db->quoteInto('service_order_id IN (?)',$orderIds);
        $this->update($data,$where);
    }

上の例の左側のflagはデータベース内のflagです.
   $select=$db->select();
   $select->from("testtable","*");
   $select->where($db->quotInto("date>=?",new Zend_Db_Expr("UNIX_TIMESTAMP()"));
   $db->fetchAll($select);

フレームワークはUNIX_には対応しませんTIMESTAMP()は、ユーザーがこの関数を正常に使用できるように引用符を追加します.
You also can create an object of type Zend_Db_Expr explicitly, to prevent a string from being treated as a column name.