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