【问题标题】:Invalid argument supplied for foreach in CodeIgniterCodeIgniter 中为 foreach 提供的参数无效
【发布时间】:2012-08-30 09:27:56
【问题描述】:

下面是我的模型,它可以正常工作。现在它返回 false,因为没有新学生的记录。但是在我的控制器中,我有一个 If 语句检查查询是否返回 true,然后遍历查询中的每一行:

我的模特:

function get_schedule($Student_ID)
{
    $query = $this -> db -> query("
        getstuff");

    if($query -> num_rows() > 0 )
    {
        $sections= $query->result();        
        return $sections;
    }
    else     
    {           
        return false;
    }
}

我的控制器:

$Student_ID = $session_data['Student_ID'];
$query['section']=  $this->grades_model->get_schedule($Student_ID);
$sections= array();

if ($query == TRUE)
{
    foreach($query['section'] as $row)
    {
        do stuff:
    }
}

问题是它给了我一个无效的 foreach 循环警告,因为没有数据可以循环。如果查询返回错误,我怎样才能使它甚至不尝试该循环。我尝试添加elseif($query == FALSE){},但 foreach 循环仍然无效。

什么给出了,我可以取消那个警告吗?

【问题讨论】:

  • 控制器中$query在哪里赋值?
  • 发布您的完整控制器代码..$query 来自哪里?
  • 尝试print_r<pre>标签下的结果,看看你的查询返回什么..
  • print_r 返回 Array ( [section] => )
  • 问题的格式不正确......他已经发布了完整的所需代码

标签: php codeigniter foreach


【解决方案1】:

这不是“部分”。你应该保持相同的名字$query['sections']

试试这个

 $Student_ID = $session_data['Student_ID'];
 $query['sections']=  $this->grades_model->get_schedule($Student_ID);


 if ($query['sections'] == false)
 {
  echo "error";
 }
 else
 {
  foreach($query['sections'] as $row)
  {
   do stuff:
  }
 }

【讨论】:

    【解决方案2】:

    试试

    型号

    function get_schedule($Student_ID)
    {
        $query = $this -> db -> query("
            getstuff");
    
        if($query -> num_rows() > 0 )
            {
             $sections= $query->result();       
             return $sections;
             }
    
        else     
             {          
            return false;
             }
    }
    

    控制器:

    $this->load->model("Model_name");
    $var=$this->Model_name->get_schedule($Student_ID);
    if ($var)
     {
      foreach($var as $row)
     {
      do stuff:
     }
    }
    

    编辑:

    确保将Model_name 更改为您的并在您的模型中查询

    【讨论】:

      【解决方案3】:

      if ($query == TRUE) 这一行没有多大意义,请尝试检查以下内容:

      if (isset($query['section']) && count($query['section']) > 0) {
          foreach ($query['section'] as $row) {
              // do stuff:
          }
      }
      

      【讨论】:

        【解决方案4】:

        这样试试

        foreach($query as $row)
         {
             do stuff:
         }
        

        如果您的 $query 是一个数组。我认为模型函数在您的情况下返回一个数组。

        你也犯了一个错误

        foreach($query['sections'] as $row)     //you did it 'section' try change it
        {
            do stuff:
        }
        

        如果有用请采纳

        【讨论】:

          【解决方案5】:

          你做错了$this->db->query() 用于 sql 查询。您可以使用$this->db->query('select * from getstuff');$this->db->get('getstuff');

          【讨论】:

          • 查询正确,格式直接来自CI网站。
          • @ShayanHusaini,这是一个例子,在 foreach 循环内的控制器中看到有虚拟文本do stuff:
          • 可能是你们写...
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多