2016-07-01 19 views
1

なぜ私のクエリがCodeigniterで空の結果を返すのか理解できません。 phpmyadminのSQLボックスで実行した場合、同じクエリが期待通りに機能します。MysqlクエリはCodeigniterで空の結果を返しますが、ネイティブPHPでは正常に動作します

id | name  | registration 
------------------------------- 
1 | John  | 2016-06-09 12:00:08 
2 | Mike  | 2016-06-12 12:45:23 
3 | Greg  | 2016-06-13 11:50:05 
4 | Anthony  | 2016-06-14 02:34:08 
5 | Adam  | 2016-06-14 04:34:18 
6 | Steven  | 2016-06-15 13:55:34 
7 | Joe   | 2016-06-16 07:23:45 
8 | David  | 2016-06-17 06:19:31 
9 | Richard  | 2016-06-17 11:20:27 
10 | Jack  | 2016-06-17 12:00:08 

など:

マイテーブル(ユーザ)は、このようなものを見て。登録日が過去7日間のすべての人のリストを取得したいだけです。 '登録'列はDATETIME型です

クエリビルダーを使用したCIモデルのコードです。すでに自動ロードデータベースライブラリ

function get_user() 
    { 
    $query = $this->db->select('name') 
        ->where('registration','BETWEEN DATE_SUB(NOW(), INTERVAL 7 DAY) AND NOW()') 
        ->get('users'); 
    return $query->result(); 
    } 

エラーなしで結果を返します。次に、このようなクエリを直接入力しようとします。

function get_user() 
    { 
    $query = $this->db>query('SELECT name FROM users WHERE registration BETWEEN DATE_SUB(NOW(), INTERVAL 7 DAY) AND NOW()'); 
    return $query->result();  
    } 

また、エラーなしで空の結果を返します。好奇心のために、私はCodeigniter以外のネイティブPHPを使って同じクエリを実行しようとしました。ここでは、コードです:

<?php 
    $link = mysqli_connect("localhost", "myusername", "mypassword", "mydatabase"); 

    if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
    } 

    $query = "SELECT name FROM users WHERE registration BETWEEN DATE_SUB(NOW(), INTERVAL 7 DAY) AND NOW()"; 
    $result = mysqli_query($link, $query); 
    while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){ 
    echo $row["name"]; 
    echo "<br>"; 
    } 

    mysqli_free_result($result); 
    mysqli_close($link); 
    ?> 

出来上がり...期待どおりに動作し、結果を返します。だから、この場合Codeigniterの問題は何ですか?任意の入力をいただければ幸いです。ありがとうございます

+0

問題は日付選択のようです。なぜそれがCIで働いていないのかまだ分かりません。日付が含まれていないクエリを作成した場合、正常に動作します。 –

+0

このクエリをチェックして正常に動作します。 –

答えて

0

私はこれがCodeIgniter 3.xであると仮定しています。ドキュメントに関連するページがあります。

http://www.codeigniter.com/user_guide/database/query_builder.html#looking-for-specific-data

要旨はあなたがここにそれを望むようwhere()が動作しないです。 2つの文字列を与えると、最初のものを列名として扱い、2番目のものを値として扱い、等価性を比較します。あなたは、ドキュメントのポイント#4で "カスタム文字列"​​のバリエーションを使用したいと思います。

また、独自のSQL文字列を作成するのが快適であると思われるので、そのルートに行って、CIクエリビルダをまったく使用しないことも考えられます。 $this->db->query()はうまく機能します。また、クエリ文字列内の?sとのバインディング、およびそれらを置き換える値の配列もサポートしています。私はそれがPDOのような名前付きバインディングをサポートしているとは思わない。

http://www.codeigniter.com/user_guide/database/queries.html

+0

はい、私はCI 3を使用しています。私はドキュメントのpoin#4の "カスタム文字列"​​の記述を認識していません。しかしそれでもまだそれは私に空の結果を与える。 –

関連する問題