Конструктор запросов Codeigniter — поиск количества записей с определенной даты не работает

#php #mysql #sql #codeigniter

#php #mysql #sql #codeigniter

Вопрос:

В codeigntier у меня есть следующее:

 echo $this->db->where('FROM_UNIXTIME(`last_login`) >=','NOW() - INTERVAL 1 DAY')->from('users')->count_all_results();
 

Приведенное выше приводит к результату: 0

Я использовал print_r($this-> db-> last_query()); чтобы получить фактическую строку sql, которая выполняется, и она выглядит следующим образом:

  SELECT COUNT( * ) AS  `numrows` 
 FROM  `users` 
 WHERE FROM_UNIXTIME(  `last_login` ) >= NOW( ) - INTERVAL 1 
 DAY
 

Когда я запускаю его с помощью mysql, я получаю правильный результат: 1.

Я предполагаю, что экранирование сейчас работает или что-то в этом роде, но не могу понять это. Есть идеи?

==== Новое обновление.

Извините, CI3 выдает это:

 SELECT COUNT(*) AS `numrows`
FROM `users`
WHERE FROM_UNIXTIME(`last_login`) >= 'NOW() - INTERVAL 1 DAY'
 

Выше выдает 0, когда я запускаю его в mysql. Когда я использую ниже, это работает:

 SELECT COUNT(*) AS `numrows`
FROM `users`
WHERE FROM_UNIXTIME(`last_login`) >= NOW() - INTERVAL 1 DAY
 

Итак, это два маленьких апострофа. Как я могу это исправить?

Комментарии:

1. Привет, помимо использования count_all_results() , вы пробовали использовать num_rows(); конструктор запросов из CI? Также попробуйте добавить $this->db->select('*') свой запрос.

2. Проблема заключается в части WHERE инструкции sql. Часть WHERE по-прежнему не меняется, и это, похоже, проблема.

3. @spreaderman . , , Вы уверены, что два запроса выполняются в одной базе данных?

4. @GordonLinoff да, определенно.

5. @GordonLinoff Извините, я только что обновил основную проблему. Кажется, проблема в апострофах

Ответ №1:

Я изменил инструкцию на следующую, и она сработала:

 $this->db->where("FROM_UNIXTIME(`last_login`) >= NOW() - INTERVAL 1 DAY")->from('users')->count_all_results();