$data = array(
'logins' => new Zend_Db_Expr('logins + 1')
);
Utilisez également citer si vous n'êtes pas aussi vulnérable à l'injection SQL:
$n = $db->update('users', $data, $db->quoteInto('user_id = ?', $_userId));
Re commentaire: Oui, dans le cas de La méthode update() suppose que vous envoyez une valeur littérale sauf si vous utilisez un objet de type Zend_Db_Expr. Vous pouvez tester vous-même:
$db->getProfiler()->setEnabled(true);
$n = $db->update('users', $data, $db->quoteInto('user_id = ?', $_userId));
$qp = $db->getProfiler()->getLastQueryProfile();
echo $qp->getQuery() . "\n";
Toute valeur littérale que vous donnez dans votre tableau $data
est paramétré de sorte que la requête finit par ressembler à ceci:
UPDATE `users` SET `login` = ? WHERE user_id = 123
Si vous utilisez un objet de classe Zend_Db_Expr, il sait interpoler la chaîne littéralement dans la requête, au lieu de paramétrage:
UPDATE `users` SET `login` = NOW() WHERE user_id = 123
Notez que lorsque vous interpoler expressions comme celui-ci, vous êtes responsable de la validation afin de ne pas avoir de failles de sécurité.
Est-ce la même chose pour 'Now()'? – MichaelICE