Должно ли это работать? (увеличить количество входов в систему?)
// 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
Обратите внимание, что когда вы интерполируете такие выражения, вы несете ответственность за проверку, поэтому вы не получаете уязвимостей безопасности.