我最近继承了一个使用ZF编写的应用程序,该应用程序在db中加密了各种字段。有很多模型扩展Zend_Db_Table_Abstract,代码类似于这个例子 -
<?php
class Partner extends Zend_Db_Table_Abstract {
protected $_name = 'partner', $_primary = 'id';
public function createPartner( $mobile ){
$id = $this->insert( array(
'mobile' => new Zend_Db_Expr("AES_ENCRYPT('$mobile', 'random_key')"),
'createdOn' => date('Y-m-d H:i:s', mktime())
) );
$res = $this->find($id);
return $res->current();
}
}
?>
我对此代码的关注是$ mobile正在逐字传递到查询中。修改此值设置方式的最简洁方法是什么,以便它使用quoteInto或其他一些使用占位符来参数化查询的方法?
答案 0 :(得分:5)
怎么样
public function createPartner( $mobile ){
$id = $this->insert( array(
'mobile' => new Zend_Db_Expr($this->getAdapter()->quoteInto("AES_ENCRYPT(?, 'random_key')", $mobile)),
'createdOn' => date('Y-m-d H:i:s', mktime())
) );
$res = $this->find($id);
return $res->current();
}
这似乎有效,但是我遗失了一些问题吗?
答案 1 :(得分:1)
在这种情况下使用预备语句:
$mobile = new Zend_Db_Expr("AES_ENCRYPT('$mobile', 'random_key')");
$date = date('Y-m-d H:i:s', mktime());
$stmt = $this->getAdapter()->prepare('INSERT INTO'.$this->_name.'(mobile, createdOn) VALUES (?, ?)');
$stmt->execute(array($mobile, $date));