这应该有用吗? (增加登录次数?)
// update the login count
$data = array(
'logins' => 'logins + 1'
);
$n = $db->update('users', $data, 'user_id = '.$_userId);
答案 0 :(得分: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
请注意,当您插入这样的表达式时,您负责验证,因此您不会遇到安全漏洞。