2009-05-15 7 views

Répondre

4
$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é.

+0

Est-ce la même chose pour 'Now()'? – MichaelICE

Questions connexes