Mysql 查询在 Codeigniter 中返回空结果,但在本机 PHP 中工作正常
Posted
技术标签:
【中文标题】Mysql 查询在 Codeigniter 中返回空结果,但在本机 PHP 中工作正常【英文标题】:Mysql query return empty result in Codeigniter but working fine in native PHP 【发布时间】:2016-11-04 02:05:54 【问题描述】:我无法弄清楚为什么我的查询总是在 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 有什么问题吗?任何输入将不胜感激。谢谢大家
【问题讨论】:
看来问题出在日期选择上。仍然不知道为什么它在 CI 中不起作用。如果我创建不涉及日期的查询,它就可以正常工作 我只是检查了这个查询并且工作正常 【参考方案1】:我假设这是 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
【讨论】:
是的,我正在使用 CI 3。感谢您的指出。我不知道文档中第 4 点中描述的“自定义字符串”。但即使使用它仍然会给我空的结果。以上是关于Mysql 查询在 Codeigniter 中返回空结果,但在本机 PHP 中工作正常的主要内容,如果未能解决你的问题,请参考以下文章
004.CI4框架CodeIgniter, 配置mysql数据库,并进行数据库查询
使用 PHP/CodeIgniter 在 MySQL 中获取最后执行的查询
MySql 查询在 PHPmyadmin 中工作,但在 codeigniter 中不工作
如何测试我的 MySQL 更新查询在 CodeIgniter 中是不是成功? [复制]