Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql查询在Codeigniter中返回空结果,但在本机PHP中工作正常_Php_Mysql_Codeigniter - Fatal编程技术网

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

Mysql查询在Codeigniter中返回空结果,但在本机PHP中工作正常,php,mysql,codeigniter,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

我不明白为什么我的查询总是在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天内的所有人的名单。”“注册”列为日期时间类型

下面是我使用查询生成器在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在这种情况下有什么问题吗?如有任何意见,将不胜感激。谢谢大家

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

要点是,
where()
的行为与您希望的不同。如果给它两个字符串,它将第一个字符串作为列名,第二个字符串作为值,并进行相等性比较。您想在文档的第4点使用“自定义字符串”变体

或者,由于您编写自己的SQL字符串似乎很舒服,您也可以考虑走这条路线,而不使用CI查询生成器。代码>$this->db->query()运行良好。它甚至支持在查询字符串中使用?s进行绑定,并使用值数组替换它们。我认为它不像PDO那样支持命名绑定


是的,我正在使用CI 3。谢谢你指出。我不知道文档中第4点的“自定义字符串”描述。但即使使用它,仍然会给我一个空结果。看起来问题出在日期选择上。仍然不知道为什么它在CI中不起作用。如果我创建的查询不涉及日期,它就可以正常工作,我只需检查这个查询,就可以正常工作