需要帮助Zend_db更新

时间:2011-05-05 07:22:42

标签: zend-framework zend-db

目前我正在使用Zend框架,我需要Zend_Db_Table_Abstract类中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 个答案:

答案 0 :(得分:2)

您的方法仅适用于整数值,因为您连接where字符串的方式不会使值转义。所以,如果你这样做

'email = '.$email

如果你使用字符串“hello world”

,它将生成一个像这样的sql字符串
WHERE email = hello world

这是一个无效的SQL语句,因此不会发生更新。你想要产生的是像这样的where子句

WHERE email = 'hello world'

有多种方法可以做到这一点,但reference manual under "Example #24 Updating Rows Using an Array of Arrays"中描述了通过Zend Framework实现这一目标最安全的方法。

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

答案 1 :(得分:2)

此代码可能对您有所帮助:

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

如果您仍然遇到问题,请告诉我.....?