Zend_Db问题...更新增量器

时间:2009-05-15 18:47:46

标签: php zend-framework zend-db

这应该有用吗? (增加登录次数?)

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

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

1 个答案:

答案 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

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