我无法弄清楚为什么我的查询总是在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的问题是什么?任何输入将不胜感激。谢谢大家
答案 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那样的命名绑定。