目前我正在使用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注入攻击
非常感谢。
答案 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);
}
如果您仍然遇到问题,请告诉我.....?