【问题标题】:Query not working in CodeIgniter查询在 CodeIgniter 中不起作用
【发布时间】:2025-12-07 00:20:04
【问题描述】:
function menuName () 
{
    $this->viewData['page_title'] = "ContentManagement Systemt!";
    $this->db->where('visible', 1);
    $this->db->order_by("position", "ASC"); 
    $query = $this->db->get('subjects');
    $subjects = $query->result();
    foreach ($subjects as $subject)
    {
        echo $subject->menu_name ."<br />";
        $this->db->where('subject_id', $subject->id );
        $query = $this->db->get('pages');
        $pages = $query->result();
        foreach ($pages as $page)
        {
            echo $page->menu_name ."<br />";
        }        
    }
}

为什么我的查询不起作用?请告诉我。

【问题讨论】:

  • 什么不起作用?没结果?错误?出乎意料的结果?
  • 是的,请提供更多详细信息。例如,告诉我们将出现哪些错误。或者也许你的表格是如何结构的。仅向我们展示代码很难提供帮助。
  • 当我运行查询时,只会出现主题 menu_name 而不是页面 menu_name。我的意思是第一个循环正在工作,但第二个循环不工作
  • 再次......不完全遵循你在说什么。请从我们的角度来看:我们无法知道您的代码中发生了什么除非您向我们提供更多详细信息。你甚至没有向我们展示你的表格是什么样子,如果有错误,或者结果是什么样的。

标签: codeigniter


【解决方案1】:

您应该始终使用如下的 foreach 循环:

$subjects = $query->result();
foreach ($subjects as $subject)

您的方法表现不佳。

也许这已经解决了您的问题 - 我现在无法测试它。您的查询变量的名称相同,并且您在两个 foreach 循环中都使用了 $query - 这可能会导致一些奇怪的行为。

【讨论】:

  • 我更改了变量 $subjects 和 $pages
  • 一条评论就足够了 :) 我看不出有什么问题。检查您的数据库表。或检查您的查询。使用 echo $this->db->last_query();你可以看到你的最后一个查询。如果您手动使用此查询(例如在 phpmyadmin 中)是否有结果?
  • @mseo 这不准确。使用 foreach($query->result().. 和 foreach($subjects... 没有性能差异,因为 PHP 的 foreach 是使用迭代器实现的。我刚刚做了性能测试,发现两者在时间上的差异在零附近波动......即没有差异。
  • @treeface 好的,性能并不“差”,但肯定存在性能差异:webcache.googleusercontent.com/… 该站点现在无法运行,所以这里是它的缓存版本。无论如何......我认为如果你可以轻松避免它,那么不要弄乱变量范围是一种更好的方法。
  • 有趣的链接,但我没有看到任何关于运行时间标准偏差的信息,也没有看到他在多台计算机上和多个随机时间执行了相同的测试。鉴于此,很难从 ~.8 秒的差异中得出太多明确的结论。我并不是说按照你说的方式去做肯定不会更快,但是鉴于以下线程中的响应,我倾向于等待更符合逻辑和经验的确定:*.com/questions/3908144/…
【解决方案2】:

你为什么不像这样回显查询:

echo $this->db->last_query()

查看结果发生了什么

也许问题就在那里。

【讨论】:

  • 你也可以 $this->output->enable_profiler(TRUE);在您的控制器上查看查询。