2012-01-05 5 views
2

내 쿼리가 왜 로그인 문자열을 쿼리 문자열에 연결하지 않든 로그인 쿼리 수가 증가하지 않는 이유는 잘 모르겠습니다.로그인 수를 늘리는

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(); 
} 
+0

'$ this-> db-> set ('number_of_logins', 'number_of_logins +1'); – Mudshark

+0

로그인 수가 다시 0으로 설정되었습니다. –

답변

1

Althought 내가 CodeIgniter의 의견의 제안에 작동 방법을 몰라, 내가 말할 수있는 것은 :

당신의 'number_of_logins'에 +1 때문에 예상되는 동작을 생성하지 않습니다 string + 숫자는 대개 문자열의 내용에 따라 예기치 않은 결과를 제공합니다.

PHP에서 숫자 구문 분석은 숫자 및 숫자 기호 문자열을 검색하여 작동합니다. 발견 된 내용은 유효하지 않은 문자가 발견 될 때까지 숫자의 가능한 부분으로 고려됩니다.

"number_of_logins"가있는 문자열의 컨텍스트에서 번호 해석을 허용하는 문자열이 없기 때문에 0 값을 생성합니다. 그러나,는 "10_number_of_logins는"1 만들 것입니다 추가하여 10를 생성 할 11

UPDATE 예를 들어

:

(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 

희망이

+0

나는 그 마지막 부분을 제외한 모든 것을 이해한다. –

+0

문자열을 숫자로 변환하는 것은 문자열을보고 숫자를 구성하는 문자열의 유효한 문자를 모두 가져 와서 잘못된 문자가 발견되는 즉시 중지합니다. 몇 가지 예제를 추가하겠습니다. –

+0

필드의 열 값에 1을 더하면 1 대신 2로 값이 변환됩니다. –

1

이 될 수 있습니다 number_of_logins이 null (null + 1 = null)로 설정되어 발생합니다. 그렇다면 number_of_logins의 기본값을 0으로 설정하고 필드를 null로 설정하지 마십시오. (당신이 MySQL을 사용하는 경우) 또는 시도 :

$ this-> DB-> 설정 ('number_of_logins', '유착 (number_of_logins, 0) +1');

여기 coalesce에 대한 추가 정보를 원하시면입니다.

관련 문제