CodeIgniter:检索单个结果行时出错

时间:2017-09-27 06:33:51

标签: php codeigniter

美好的一天!

我有这个代码来获取员工的信息。 (单个结果)

控制器

public function get_employee_info()
{
    $id = $this->input->post("id");

    $data["emp_default_info"] = $this->My_model->get_single_result("SELECT * FROM employees WHERE id = '$id' "); 

    $this->load->view("employee_info_view", $data);
}

模型

public function get_single_result($query_statement)
{
    $query = $this->ECS_DB->query($query_statement);
    return $query->row_array();
}

查看

foreach ($emp_default_info as $row)
{
    echo $id = $row->id;
    echo "<br/>".$lname = $row->lname;
    echo "<br/>".$fname = $row->fname;
    echo "<br/>".$mname = $row->mname;
}

错误:

  

遇到PHP错误

     

严重性:警告

     

消息:为foreach()提供的参数无效


我想做的就是返回特定员工的信息。我不知道为什么会出现这个错误。

请帮忙吗?

谢谢!

6 个答案:

答案 0 :(得分:1)

试试这个

控制器:

public function get_employee_info() {
    $id = $this->input->post("id");

    $data["emp_default_info"] = $this->My_model->get_single_result($id);

    $this->load->view("employee_info_view", $data);
  }

型号:

public function get_single_result($id)
{
    $this->db->where("id",$id);
    $query = $this->db->get("employees");
    return $query->result();
}

查看:

foreach ($emp_default_info as $row)
{
    echo $id = $row->id;
    echo "<br/>".$lname = $row->lname;
    echo "<br/>".$fname = $row->fname;
    echo "<br/>".$mname = $row->mname;
}

答案 1 :(得分:1)

A PHP Error was encountered

Severity: Warning

Message: Invalid argument supplied for foreach()

因为$emp_default_info为null或false或者参数不是数组

所以你可以做的如下:

更正您的型号代码:

public function get_single_result($query_statement)
{
  $query = $this->ECS_DB->query($query_statement);
  $row = $query->row_array();
  if (isset($row)){
     return $row;
  }
      return array();
}

查看其数组是否

$emp_default_info也是数组,因为您拨打了row_array();,无法访问$row->id

if(is_array($emp_default_info) && !empty($emp_default_info))
{

   foreach ($emp_default_info as $row)
   {
    echo $id = $row['id'];
    echo "<br/>".$lname = $row['lname'];
    echo "<br/>".$fname = $row['fname'];
    echo "<br/>".$mname = $row['mname'];
   }

}else{
      echo "Employee Information not found";
}

我们可以像这样重新生成此错误,例如

$ php -r 'foreach(null as $e){}'
PHP Warning:  Invalid argument supplied for foreach() in Command line code on line 1

/*false OR FALSE*/
$ php -r 'foreach(false as $e){}'
PHP Warning:  Invalid argument supplied for foreach() in Command line code on line 1

/* Not array */
$ php -r 'foreach("somestring" as $e){}'
PHP Warning:  Invalid argument supplied for foreach() in Command line code on line 1

答案 2 :(得分:0)

row_array()返回结果数组。

查看:

    echo $id = $row['id'];
    echo "<br/>".$lname = $row['lname'];
    echo "<br/>".$fname = $row['fname'];
    echo "<br/>".$mname = $row['mname'];

答案 3 :(得分:0)

您没有使用foreach,因为row_array仅返回特定行的数组。检查documentation以获取更多信息

echo $id = $row['id'];
echo "<br/>".$lname = $row['lname'];
echo "<br/>".$fname = $row['fname'];
echo "<br/>".$mname = $row['mname'];

答案 4 :(得分:0)

功能row_array返回The requested row or NULL if it doesn’t exist

因此,如果您的查询失败,NULL将存储在$data["emp_default_info"]

你需要将array/object类型的变量传递给foreach,在你的情况下它可能是NULL。首先在数据库站点(workbench或phpmyadmin)尝试输出查询。

如果查询成功,它将返回一行(单行)。因此,您可以像

一样循环
foreach($emp_default_info as $val)
{
    echo $val;
}

因为它只返回一行你不需要使用循环。你可以访问 它由数组索引直接作为$emp_default_info['id']等。

答案 5 :(得分:0)

你可以尝试最少的没有。的线条。

public function get_employee_info()
{
    $id = $this->input->post("id");
    $this->db->where('id', $id);
    $q = $this->db->get('employees');
    $row = array_shift($q->result_array());
    echo $row['fname']; //and so on
}

所以不需要添加用于在Model中获取一条记录的代码。它已经存在于父模型中。