Увеличение количества логинов - PullRequest
2 голосов
/ 05 января 2012

Я не совсем уверен, почему мой запрос не увеличивает число входов в систему на единицу, даже не прикрепляя его к строке запроса.

public function update_logins($user_id)
{
    $this->db->set('number_of_logins', 'number_of_logins'+1);
    $this->db->where('user_id', $user_id);   
    $this->db->update('users_logins');
    echo $this->db->last_query();
}

Ответы [ 2 ]

1 голос
/ 05 января 2012

Это может быть вызвано тем, что для number_of_logins установлено значение null (null + 1 = null). Если это так, установите значение по умолчанию для number_of_logins равным 0 и не обнуляйте поле; или (если вы используете mysql) попробуйте:

$ this-> db-> set ('number_of_logins', 'coalesce (number_of_logins, 0) +1');

Подробнее о coalesce .

1 голос
/ 05 января 2012

Хотя я не знаю, как codeigniter будет работать с предложением в комментариях, я могу сказать вам следующее:

Ваш +1 к 'number_of_logins' не приведет к ожидаемому поведению, потому что строка +число обычно дает неожиданный результат в зависимости от содержимого строки.

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

В контексте строки с "number_of_logins" он выдаст значение 0, потому что вта строка, которая позволяет интерпретацию числа.Но "10_number_of_logins" сгенерирует 10 и, следовательно, добавление 1 будет равно 11.

ОБНОВЛЕНИЕ

Например:

(int)"3 pigs" = 3 //The first character is valid "3" but the space is not
(int)"Three pigs" = 0 //The first character "T" is invalid, thus number is 0
(int)"17.1 percent" = 17.1 //Period is a valid character
(int)"17,1 percent" = 17 //Comma is not a valid character
(int)"I fly with 3 pigs" = 0; //Even if 3 is in the string, it starts with "I" which is invalid

Надеюсь, это поможет

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