Zend_Db_Expr
zendframeworkでDbクラスを使用すると、フレームワークが自動的にsql文に引用符を付けてデータベース攻撃を防ぐため、zend dbクラスでmysqlの内蔵関数(メソッド、ストレージプロシージャなど)を使用できないという問題が発生します.zendフレームワークにはクラスZend_が用意されていますDb_Exprでは、このようなコンストラクション関数は、フレームワークに変換されたタイプに引用符を付けないように指示します.
上の例の左側のflagはデータベース内のflagです.
フレームワークは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.
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.