#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();