Нужна помощь с обновлением Zend_db - PullRequest
0 голосов
/ 05 мая 2011

В настоящее время я работаю с 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

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

Ответы [ 2 ]

2 голосов
/ 05 мая 2011

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

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

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

2 голосов
/ 05 мая 2011

Ваш подход работает только с целочисленными значениями, потому что способ, которым вы соединяете строку 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);
...