Mysql查询在Codeigniter中返回空结果,但在本机PHP中工作正常

时间:2016-07-01 15:34:33

标签: php mysql codeigniter

我无法弄清楚为什么我的查询总是在Codeigniter中返回空结果。在phpmyadmin的SQL框中运行时,相同的查询按预期工作。

我的表(用户)看起来像这样:

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天的所有人的名单。 'registration'列是DATETIME类型

这是使用Query Builder在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的问题是什么?任何输入将不胜感激。谢谢大家

1 个答案:

答案 0 :(得分:0)

我假设这是CodeIgniter 3.x.这是文档中的相关页面。

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

要点where()并不像你想要的那样。如果给它两个字符串,则将第一个作为列名称,将第二个作为值处理,并比较相等性。您想在文档中使用第4点中的“自定义字符串”变体。

或者,由于您似乎很乐意编写自己的SQL字符串,因此您也可以考虑使用该路由而不使用CI查询构建器。 $this->db->query()效果很好。它甚至支持在查询字符串中使用?s进行绑定,并使用一个值数组来替换它们。我不认为它支持像PDO那样的命名绑定。

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