2011-05-05 163 views
0

目前我正在使用Zend框架,我需要Zend_Db_Table_Abstract類中的Zend_db更新幫助。需要關於Zend_db更新的幫助

這裏是我的SQL語句

UPDATE user 
    SET password = '$password', 
`enter code here` WHERE email = '$email' 

這是我在Zend_Db的代碼

public function updatePassword($password,$email) 
    { 
     $data = array(
      'password' => $password 
     ); 

     $where = "email = '". $email ."'"; 
    $this->update($data, 'email = '.$email); 


    } 

這只是工作,如果我更新使用INT id作爲我的where子句,但我想用一個電子郵件串作爲where子句。

有人可以幫助我實現這一目標的最佳方式嗎?

我想要安全並避免SQL注入攻擊

非常感謝。

回答

2

你的方法只適用於整數值,因爲你連接字符串的方式不會逃避值。所以,如果你

'email = '.$email 

它將產品的SQL字符串這樣的,如果你使用字符串「Hello World」

WHERE email = hello world 

這是無效的SQL語句,所以更新不會發生。你想生產什麼是where子句這樣

WHERE email = 'hello world' 

有多種方法可以做到這一點,但要做到這一點通過Zend框架在reference manual under "Example #24 Updating Rows Using an Array of Arrays"描述的最安全的方式。

$data = array(
    'password' => $password 
); 
$where['email = ?'] = $email; 
$this->update($data, $where); 
2

此代碼可以幫助你:

public function updateDetails($data, $emailId) 
{ 
    $where = array('email = ?' => $emailId); 
    $this->update($data, $where); 
} 

請讓我知道,如果你仍然面臨的問題.....?