2012-02-28 1 views
2

私は最近、ZFを使って書かれたアプリケーションを継承しました。これは、さまざまなフィールドがdbで暗号化されています。この例のようなコードで取得Zend_Db_Table_Abstractを拡張する多くのモデルがあります - このコードでZend_Db_Table_AbstractとZend_Db_Expr

<?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(); 
    } 

} 
?> 

私の関心は、$モバイルは、クエリに文字通り渡されていることです。この値が設定される方法を変更する最もクリーンな方法は何ですか?quoteIntoや他の方法でプレースホルダを使用してクエリをパラメトリックにする方法この場合

答えて

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(); 
} 

は、これが動作しているようですが、私は行方不明ですそれにいくつかの問題がありますか?

+0

+1良い解決策IMO – drew010

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)); 
+0

ありがとうございます。私はこの方法を認識していますが、現在insert()を使用しているすべてのメソッドを書き直すことなく、その方法を実行する方法があることを期待していました。その他の提案はありますか? – nnichols

関連する問題