Сравните две даты в Codeigniter и MySQL - PullRequest
2 голосов
/ 09 июня 2011

Как получить значения между двумя датами в функции запроса Codeigniter? Вот моя модель и пример кода.

function get_promo() {
    $today = date('Y-m-d');
    $query = $this->db->query('SELECT FROM tbl_event WHERE event_id = $id AND event_startdate <= $today
    AND event_enddate >= $today');
    return $query;
}

Но это не работает, вот ошибка, которую я получил

A Database Error Occurred

Error Number: 1064

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM tbl_event WHERE event_id = 36 AND event_startdate <= 2011-06-09 ' at line 1

SELECT FROM tbl_event WHERE event_id = 36 AND event_startdate <= 2011-06-09 AND event_enddate >= 2011-06-09

Filename: C:\xampp\htdocs\hotel\system\database\DB_driver.php

Line Number: 330

Ответы [ 5 ]

6 голосов
/ 09 июня 2011

Я думаю, что вам нужно квоты вокруг вашей даты (например, «2011-06-08»).попробуйте это

function get_promo() {
    $today = date('Y-m-d');  
    $query = $this->db->query(
        "SELECT FROM tbl_event WHERE event_id = {$id} AND event_startdate <= '{$today}'
        AND event_enddate >= '{$today}'");
    return $query;
}

Если ваши столбцы event_startdate и event_enddate имеют тип DATETIME, но вас интересует только часть даты, вы можете выполнить `DATE (event_enddate), чтобы извлечь часть даты

1 голос
/ 09 июня 2011

Я думаю, вам нужен пользователь date_format (), дополнительная информация по этой ссылке http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format.

Попробуйте этот код:

$today = date('Y-m-d');
$query = $this->db->query("SELECT FROM tbl_event WHERE event_id = $id AND DATE_FORMAT(event_startdate ,'%Y-%m-%d') >= DATE_FORMAT($today ,'%Y-%m-%d') AND DATE_FORMAT(event_enddate ,'%Y-%m-%d') <= DATE_FORMAT($today ,'%Y-%m-%d')");
1 голос
/ 09 июня 2011

Глядя на ошибки, кажется, что ваши запросы не экранированы должным образом.Добавьте одинарные или двойные кавычки, чтобы исправить это.Проверьте ответ @danneth.Используйте Query Binding , что просто и безопасно, или даже больше используйте Active Record .Ниже приведены примеры привязки и активной записи на основе вашего кода.

Пример привязки запроса

    $today = date('Y-m-d');
    $sql = 'SELECT 
  * 
FROM
  tbl_event 
WHERE event_id = ? 
  AND event_startdate <= ? 
  AND event_enddate >= ?';
    $query = $this->db->query($sql, array($id, $today, $today));
return $query;

Пример активной записи

$query = $this->db
        ->select('*')->from('tbl_event')
        ->where(array(
            'event_id' => $id,
            'event_startdate <= ' => $today,
            'event_enddate >= ' => $today
        ))
        ->get();
return $query;

Добавить ->result() или ->result_array() и т. Д., Чтобы получить результат в виде объекта или массива.Посмотрите в Codeigniter Руководство пользователя базы данных для получения дополнительной информации.Удачного кодирования!

0 голосов
/ 27 мая 2017
$this->db->where('date_start <=',date('Y-m-d'));
$this->db->where('date_end >=',date('Y-m-d'));
$query = $this->db->get('table');
0 голосов
/ 09 июня 2011

Вам нужно использовать правильный формат. Попробуйте это:

$todaystart = date('Y-m-d 00:00:00');  
$todayend = date('Y-m-d 23:59:59');  
       $query = $this->db->query('SELECT FROM tbl_event WHERE event_id = $id AND event_startdate <= ? AND event_enddate >= ?', array($todaystart, $todayend));

РЕДАКТИРОВАТЬ: ваш запрос неверен. Сделайте это:

$todaystart = date('Y-m-d 00:00:00');  
$todayend = date('Y-m-d 23:59:59');  
       $query = $this->db->query('SELECT * FROM tbl_event WHERE event_id = $id AND event_startdate <= ? AND event_enddate >= ?', array($todaystart, $todayend));
...