3

这应该工作吗?(增加登录次数?)

// update the login count
$data = array(
   'logins' => 'logins + 1'
);

$n = $db->update('users', $data, 'user_id = '.$_userId);    
4

1 回答 1

4
$data = array(
   'logins' => new Zend_Db_Expr('logins + 1')
);

还可以使用引用,这样您就不会那么容易受到 SQL 注入的影响:

$n = $db->update('users', $data, $db->quoteInto('user_id = ?', $_userId));

重新评论:是的,在 update() 方法的情况下,它假定您发送的是文字值,除非您使用 Zend_Db_Expr 类型的对象。你可以自己测试一下:

$db->getProfiler()->setEnabled(true);
$n = $db->update('users', $data, $db->quoteInto('user_id = ?', $_userId));
$qp = $db->getProfiler()->getLastQueryProfile();
echo $qp->getQuery() . "\n";

您在$data数组中提供的任何文字值都是参数化的,因此查询最终看起来像这样:

UPDATE `users` SET `login` = ? WHERE user_id = 123

如果您使用 Zend_Db_Expr 类的对象,它知道将字符串按字面意思插入到查询中,而不是参数化:

UPDATE `users` SET `login` = NOW() WHERE user_id = 123

请注意,当您像这样插入表达式时,您负责验证,因此您不会遇到安全漏洞。

于 2009-05-15T18:57:49.233 回答