3

Codeigniterクエリ関数で2つの日付の間の値を取得するにはどうすればよいですか? これが私のモデルとサンプルコードです。

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
4

5 に答える 5

7

日付の前後にクォートが必要だと思います(つまり、「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_startdateevent_enddateDATETIMEタイプであるが、日付部分のみに関心がある場合は、 `DATE(event_enddate) を実行して日付部分を抽出できます

于 2011-06-09T08:43:23.897 に答える
1

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')");
于 2011-06-09T05:51:44.603 に答える
1

エラーを調べると、クエリが適切にエスケープされていないようです。一重引用符または二重引用符を追加して修正してください。@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データベース ユーザー ガイドを参照してください。

于 2011-06-09T07:03:50.607 に答える
0

適切な形式を使用する必要があります。これを試して:

$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));
于 2011-06-09T05:04:22.617 に答える