Codeigniter, увеличить значение базы данных на значение, содержащееся в переменной - PullRequest
9 голосов
/ 31 июля 2011

Я использую codeigniter, и в моей модели есть следующая функция для начисления очков пользователю.Однако он не работает, а устанавливает для столбца точек значение 0.

Вот как это написано в руководстве по codeigniter.Поэтому я понятия не имею, почему он не работает ...

Спасибо

function give_points($username,$points)
{
    $this->db->set('points', 'points + $points');
    $this->db->where('username', $username);
    $this->db->update('users'); 
    echo"done";
}

Ответы [ 3 ]

13 голосов
/ 31 июля 2011

Я полагаю, что вы должны указать CI, чтобы не экранировал текст. У меня нет установки CI, чтобы проверить это, но я думаю, что-то вроде:

$this->db->set('points', 'points + ' . (int) $points, FALSE);
2 голосов
/ 31 июля 2011

Не уверен, что это является причиной вашей проблемы, но вы используете одинарные кавычки в следующих строках:

$this->db->set('points', 'points + $points');

При этом строка $points будет вставлена ​​как есть, буквально, в ваш SQL-запрос - это не его значение, которое будет использоваться.


Если вы хотите, чтобы $points было интерполировано (чтобы его значение помещалось на место этой строки) , вы должны использовать двойные кавычки:

$this->db->set('points', "points + $points");


Для получения дополнительной информации о интерполяции переменных см. Раздел Анализ переменных Руководства по PHP.

0 голосов
/ 31 июля 2011

Если есть шанс, всегда проверяйте созданный SQL-запрос - я не знаю, как это сделать с CI.

Однако ваш set() выглядит некорректно.

$this->db->set('points', "points + $points");

Ранее $points был частью строки и не расширялся содержимым $points, поскольку вы использовали одинарную кавычку вместо двойной кавычки - см. Руководство относительно строк в PHP.

$this->db->set('points', 'points + ' . (int) $points);

Немного лучший код, приведенный выше, так как он побеждает возможные SQL-инъекции , в зависимости от того, откуда $points изначально пришел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...