使用 CodeIgniter 的 MySQL 查询问题

Posted

技术标签:

【中文标题】使用 CodeIgniter 的 MySQL 查询问题【英文标题】:MySQL Querying Issue using CodeIgniter 【发布时间】:2013-08-29 05:52:58 【问题描述】:

所以我能够找到我的earlier problem 的根本原因。

原来问题出在查询上。好吧,不在我这边,至少我不这么认为。这个问题已经困扰了我好几个小时了。不幸的是,我不知道如何解决。

请检查此代码:

public function get_calendar_content($y,$m)

   $query = $this->db->query("SELECT * from events WHERE event_date LIKE '$y-$m%'");
   $content=array();
   foreach($query->result() as $q)
       $content[substr($q->event_date,8,2)]=$q->event_details;
   
   return $content;

此函数忽略我为$m 或月份提供的任何内容。它只关心年份。另外,当我尝试从events table 中选择所有数据而不是使用where 子句时,它仍然只返回日期为8 月份的events 表中的条目或数据。

当我尝试将where 子句显式写入event_date LIKE '2013-09%' 时,它根本不会返回任何数据。我不明白发生了什么事。由于某些未知原因,该函数只会返回 8 月的数据。我已经尝试在 phpMyAdmin 上编写查询,它的工作原理正是它应该做的。它只会在我的应用程序中产生不规则性。我的问题可能是什么?

编辑:我现在使用多维数组。它修复了关于多个事件的混淆,但仍然没有返回其他月份的数据。

public function get_calendar_content($y,$m)
$query = $this->db->query("SELECT * from events WHERE event_date LIKE '$y-$m%'");
           $content=array();

       foreach($query->result() as $q)
           $content[substr($q->event_date,8,2)][]=$q->event_details;
       
       return $content;

【问题讨论】:

明确写的时候是用event_date LIKE '2013-09'还是event_date LIKE '2013-09%' 对不起,我写的是'2013-09%' 你为$m设置了什么值?整数? $y 和 $m 是字符串。 如果@koala_dev 的解决方案不起作用,请尝试将查询分配给一个变量,然后echoing 看看它是否符合您的预期。 【参考方案1】:

问题在于您如何构建返回数组:

substr($q->event_date,8,2) 将获取每个事件 (1-31) 的日期,并且您将其用作键,但数组不能有重复键,因此只会保留最后一个值。

解决方案是更改数组的键值,以免它们重复

【讨论】:

我明白了。可能就是这样。由于我每天允许多个事件,这是否意味着我必须改用多维数组? @ChristianCastillo 如果您只查找一个月的数据,是的,您可以这样做$content[substr($q->event_date,8,2)][] = $q->event_details 原来我将不得不采用不太好的方法来修改 CI 的日历库。非常感谢! 等等。它有点解决了“每天多个事件”的问题,但它仍然没有返回除 8 月之外的其他月份的数据。我更新了代码。 @ChristianCastillo 在 return 语句之前放置var_dump($this->db->last_query()) 并检查正在使用的查询,我相信问题不在于函数,而在于您传递给$m的参数

以上是关于使用 CodeIgniter 的 MySQL 查询问题的主要内容,如果未能解决你的问题,请参考以下文章

mysql慢查询中的Codeigniter会话查询

Mysql查询使用codeigniter检查用户名和密码

MySql 查询在 PHPmyadmin 中工作,但在 codeigniter 中不工作

Codeigniter 未显示 MySQL 查询获取的数组的正确结果。

codeigniter mysql中sql查询的空结果

Codeigniter 查询在远程 MySQL 服务器上返回 Null