2012-02-28 47 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 2012-02-29 04:29:49

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 2012-02-28 22:07:22

相關問題