Php 尝试从2个表获取数据时出错codeigniter

Php 尝试从2个表获取数据时出错codeigniter,php,mysql,codeigniter,fetch,Php,Mysql,Codeigniter,Fetch,我要从两个表中获取数据。。我的表格是“研究”、“用户”和“主题” “研究”包括:(id、用户id[是表“用户”中“id”列的外键]、科目id[是表“科目”中“id”列的外键]、年级、日期) “用户”包括:(id、用户名、姓名、姓氏、密码、类型、状态、日期) “主题”包括:(id、职业id、姓名、描述、时间) 我想在最后得到这样的东西: 我得到了这个错误: 这是我的密码: 我的视图文件(“主页”): 表:研究 身份证件 使用者 主题 等级 日期 行动 未定义的索引和尝试获取属性非对象或多

我要从两个表中获取数据。。我的表格是“研究”、“用户”和“主题”

“研究”包括:(id、用户id[是表“用户”中“id”列的外键]、科目id[是表“科目”中“id”列的外键]、年级、日期)

“用户”包括:(id、用户名、姓名、姓氏、密码、类型、状态、日期)

“主题”包括:(id、职业id、姓名、描述、时间)

我想在最后得到这样的东西:

我得到了这个错误:

这是我的密码: 我的视图文件(“主页”):


表:研究
身份证件
使用者
主题
等级
日期
行动

未定义的索引和尝试获取属性非对象或多或少意味着相同的事情,即您没有获取正确的数据,或者您尝试获取的变量或索引没有初始化或未定义,这可能是查询中的错误或您正在运行的查询返回空数据

我想请求您像这样提取查询数据

$check = $this->db->query("SELECT * FROM SOMETHING AND YOUR CONDITION AND STUFF HERE"); 

if($check->num_rows()>0){
 $result = $check->result(); 
 return $result;
}else{
 return false; // or anything you want. 
}
$someVariable = $this->model_name->function();
if($someVariable!==FALSE){
// handle
}else 
{
// handle
}
假设这个查询函数存储在模型中,您可以这样调用您的模型

$check = $this->db->query("SELECT * FROM SOMETHING AND YOUR CONDITION AND STUFF HERE"); 

if($check->num_rows()>0){
 $result = $check->result(); 
 return $result;
}else{
 return false; // or anything you want. 
}
$someVariable = $this->model_name->function();
if($someVariable!==FALSE){
// handle
}else 
{
// handle
}
最后,我不知道为什么,但有时我也会用双引号来解决问题,是的,我知道。。双引号内的变量起作用,我只是说有时。。。至少它发生在我身上,所以我想请求最后一件事。尝试像这样调试您的查询,目前您有

"SELECT * FROM TABLE WHERE THIS = $THAT" 
将此更改为

"SELECT * FROM TABLE WHERE THIS = '".$THAT."'"
我希望这对你有好处

编辑: (很抱歉,我未能从您自己的代码中显示示例) 您的模型文件

  <?php

    class Crudmodel extends CI_Model{

        public function __construct(){
         parent::__construct();

         $this->load->database();

        }


        function selectStudys()
{
    $query= $this->db->query("SELECT * FROM Study");
    if($query->num_rows()>0){
       $result = $query->result_array();
     }else{
      $result = "";
          // or anything you can use as error handler
      return $result;
    }
}

function getName($name)
{
    $query= $this->db->query("SELECT username FROM Users WHERE id = $name ");
    if($query->num_rows()>0){
    $result = $query->result_array();
    }else{
    $result = "";
          // or anything you can use as error handler
    return $result;
  }
}

function getSubName($subject)
{
    $query= $this->db->query("SELECT name FROM Subjects WHERE id = $subject ");
  if($query->num_rows()>0){
     $result = $query->result_array();
  }else{
      $result = "";
          // or anything you can use as error handler
      return $result;
}
    }

 function CombineResults($subject, $name){
  // you can also use this
   $query = $this->db->query("SELECT sub.name, user.username FROM Subjects sub, Users user WHERE sub.id=$subject AND user.id = $name");
   if($query->num_rows()>0){
        return $query->result();
         }else{
           return "";
              // or anything you can use as error handler
        }
    }       
  }
    ?>

Iam将您的查询更改为“加入查询”,只需将代码更改为以下内容

public function index(){

    # get all data in Study table

    $query = $this->db->query("SELECT sd.user_id as id,sd.grade as grade,sd.date as date,sd.subject_id as subject,ur.username as user FROM Study as sd,Users as ur,Subjects as sb WHERE ur.id=sd.user_id and sb.id=sd.subject_id");

    $result = $query->result_array();

    $data['records'] = $result;

    $this->load->view('home', $data);

}

现在运行代码

伙计,你能帮我用mycode吗?我有点头晕:如果我的回答让情况恶化,我很抱歉,我该怎么帮你,你尝试过我的解决方案吗,兄弟?只需尝试在空白或错误查询上添加处理程序,以便索引不为空。它将解决您的问题,例如,您正在尝试初始化
$var['index']='
$var['index']=$something
假设
$something
是当您的代码在使用
num_rows()检查查询响应后具有值时
null
是指当您的查询不起作用,并且在检查
num_rows()==0
后返回空值时,它会修复。我的意思是,我不理解您的答案:S。如果您可以将其与我的代码结合起来,您会帮我很多忙。mate:)mate,它说有一个错误,请查看:
如果(!empty($user[0]['username')){
我错过了“
”结束小括号请穿上这个,如果(!empty($user[0]['username']){
-更新了答案并在那里添加了小括号,它会像这样工作。-不工作,朋友,看一下:等等:/Not working:S,看一下伙计:它工作不正常,我得到了这个图表:这是我的数据库(用户)和我的主题数据库:你在吗,伙计?
  public function index(){

    # get all data in Study table
    $selectStudys = $this->Crudmodel->selectStudys();
    // we have condition on this model method/function we can validate
    // response comming from this method and add handler just like we did
    // for queries. your main problem can be this

    foreach ($selectStudys as $key => $study) 
    {
        # get UserNames
        $user = $this->Crudmodel->getName($study['user_id']);

        #get Subject Names
        $subject = $this->Crudmodel->getSubName($study['subject_id']);


        #append both NEW VALUES to same array

        if(!empty($user[0]['username'])){
        $data[$key]['user_id'] = $user[0]['username'];
        // your main problem can be this. may be it is not getting value from query this is why we have put validation on model function and error handler condition here
        }else{
         $data[$key]['user_id'] = ''; // or anything as your else condition you can use as error handler 
        }
        if(!empty($subject[0]['name'])){
        $data[$key]['subject_id'] = $subject[0]['name'];
        // your main problem can be this. may be it is not getting value from query this is why we have put validation on model function and error handler condition here
        }else{
           $data[$key]["subject_id"] = "";
          // or anything you can use as error handler
        }

    }


    $data['records'] = $selectStudys;
    $this->load->view('home', $data);

}
public function index(){

    # get all data in Study table

    $query = $this->db->query("SELECT sd.user_id as id,sd.grade as grade,sd.date as date,sd.subject_id as subject,ur.username as user FROM Study as sd,Users as ur,Subjects as sb WHERE ur.id=sd.user_id and sb.id=sd.subject_id");

    $result = $query->result_array();

    $data['records'] = $result;

    $this->load->view('home', $data);

}