Нужна помощь с обновлением Zend_db

В настоящее время я работаю с Zend framework, и мне нужна помощь с обновлением Zend_db в классе Zend_Db_Table_Abstract.

Вот мой оператор 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 Injection

Большое спасибо заранее.


person user648198    schedule 05.05.2011    source источник


Ответы (2)


Ваш подход работает только с целочисленными значениями, потому что способ объединения строки where не экранирует значение. Итак, если вы это сделаете

'email = '.$email

Будет произведена такая строка sql, если вы используете строку "hello world"

WHERE email = hello world

Это недопустимый оператор SQL, поэтому обновления не происходит. Вы хотите создать предложение where, подобное этому

WHERE email = 'hello world'

Есть несколько способов сделать это, но самый безопасный способ сделать это через Zend Framework описан в справочное руководство в разделе «Пример № 24« Обновление строк с использованием массива массивов »».

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

Этот код может вам помочь:

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

Пожалуйста, дайте мне знать, если вы все еще столкнетесь с проблемой .....?

person Pushpendra    schedule 05.05.2011