2011-12-18 2 views
0

У меня возникает довольно интригующая проблема, и я понятия не имею, почему.Codeigniter. Проверка сеанса, num_rows(), возвращающий итоговый счет

Используя приведенный ниже код, если установлен идентификатор сеанса, оператор echo возвращает «1» - он находит пользователя с этим идентификатором сеанса в базе данных.

Если, однако, пользователь вышел из системы, а 'my_session_id' был установлен в 0, так что в базе данных не найдено результата, то, как представляется, выражение echo возвращает количество строк в таблице ... IE as хотя это только заявление было $query=$this->db->get('users');

Любые идеи относительно того, почему?

$session=$this->session->userdata('my_session_id'); 
$this->db->where('session',$session); 
$query=$this->db->get('users'); 

$count=$query->num_rows(); 



//echo $session."<br>"; 
echo $count; 
+0

вы можете проверить последний запрос, запущенный с помощью 'echo $ this-> db-> last_query();'. Можете ли вы проверить, если сформирован соответствующий запрос? – Pradeep

+0

во всех случаях отображается правильный запрос. * Странно * –

ответ

0

Возможно, потому что недостающее значение сеанса возвращает ноль, а затем вызывает игнорирование той части, где она игнорируется. Добавление котировки могут помочь:

$this->db->where('session',"$session"); 
0

ли session столбец таблицы users типа символов или числового типа? Если это целое число, ваш код должен работать; Однако, если это символьный тип, код бросает следующий SQL:

SELECT * FROM (`users`) WHERE `session` = 0 

, который возвращает все записи в таблице пользователей. Оно должно быть:

SELECT * FROM (`users`) WHERE `session` = '0' 

Для того, чтобы сделать это, ваш код должен быть что-то вроде:

$this->db->where('session', (string)$session); 

Надеется, что это поможет!

Смежные вопросы