Mysql查询在Codeigniter中返回空结果,但在本机PHP中工作正常
我不明白为什么我的查询总是在Codeigniter中返回空结果。在phpmyadmin中的SQL框中运行时,相同的查询将按预期工作 我的表(用户)如下所示: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
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中不起作用。如果我创建的查询不涉及日期,它就可以正常工作,我只需检查这个查询,就可以正常工作