用户
 找回密码
 入住 CI 中国社区
搜索
查看: 8994|回复: 13
收起左侧

JOIN用法有錯嗎

[复制链接]
发表于 2008-11-5 16:46:38 | 显示全部楼层 |阅读模式
PHP复制代码
function select_pmacm($data)
    {
       
    $PersonID = $data->PersonID;  
     
    $this->load->database();
    $this->db->select('*');
    $this->db->where('PersonMaster.PersonID =',$PersonID);
    $this->db->from('PersonMaster');
    $this->db->join('AssocChairMan', 'AssocChairMan.PersonID = PersonMaster.PersonID ');    
    $query = $this->db->get();
    return $query;
   
    }
复制代码


為什麼都Fatal error: Call to a member function result() on a non-object in

是少了什麼雙引號或是單引號嗎?
发表于 2008-11-5 17:08:57 | 显示全部楼层
你查寻的结果是单条条数据,因为你用了where("id",$id);
所以,你的结果只能用$query->row()返回对象,或是用$query->row_array()返回数组。
你用了result()所以错了。
如果返回的结果是多条数据,如你的例子中,把where那行代码去掉,就是用$query->result()再用foreach循环输出
:)
 楼主| 发表于 2008-11-5 18:26:37 | 显示全部楼层
用了result()什麼意思有點不太點懂可以打段程式告訴我那裡錯了嗎
 楼主| 发表于 2008-11-6 00:28:43 | 显示全部楼层
我在Controllers這樣寫
PHP复制代码
$this->load->model('modelacm');
    $query['data'] = $this->modelacm->select_acm($data);    
    $this->load->view('view_acmdata',$query);
    $this->login_acm();
复制代码


在Model
PHP复制代码
function select_acm($data)
    {
    $PersonID = $data->;PersonID;  
    $Status = $data->Status;                              
    $AssocChairType = $data->AssocChairType;            
    $AssocChairManID = $data->AssocChairManID ;      
                 
    $this->load->database();
    $this->db->select('*');        
    $this->db->where('"AssocChairMan"."ersonID" = ',$PersonID);
    $this->db->or_where('"AssocChairMan"."Status" = ',$Status);
    $this->db->or_where('"AssocChairMan"."AssocChairType" = ',$AssocChairType);
    $this->db->or_where('"AssocChairMan"."AssocChairManID" = ',$AssocChairManID);
    $this->db->from('AssocChairMan');
    $this->db->join("AssocChairMan", "AssocChairMan.PersonID = PersonMaster.PersonID");        
    $query = $this->db->get();
        return $query;
   
    }
复制代码


在view
PHP复制代码
foreach($data->result() as $row){
    echo '<TD align=left>';
    echo  $row->;PersonID;
    echo  '</TD>';
    echo '<TD align=left>';
    echo  $row->ChineseName;
    echo  '</TD>';
    echo '<TD align=left>';
    echo  $row->Sex;
    echo  '</TD>';
    echo '<TD align=left>';
    echo  $row->Status;
    echo  '</TD>';
}
复制代码



不過還是出現錯誤!

是在view的foreach($data->result() as $row)這一段

是那裡出了錯!!

我不太懂妳說的意思

[ 本帖最后由 kfrico 于 2008-11-6 00:30 编辑 ]
发表于 2008-11-6 08:59:24 | 显示全部楼层

在view的foreach($data->result() as $row)這一段
改为:
foreach($data->row() as $row)

原因,$data->result()是在抓到多个record时用的
但是,你的只是抓1条record,所以用$data->row()
Good luck
 楼主| 发表于 2008-11-6 12:10:24 | 显示全部楼层
Call to a member function row() on a non-object in
照你說的改成foreach($data->row() as $row)
還是一樣錯誤
怎麼會這樣!
困擾好幾天了都找不出原因!
发表于 2008-11-6 13:13:23 | 显示全部楼层
你可以将sql执行结果打出来看看,是个什么类型,再输出
 楼主| 发表于 2008-11-6 13:18:09 | 显示全部楼层
什麼意思?該怎麼打?
发表于 2008-11-6 14:09:46 | 显示全部楼层
$this->db->where('"AssocChairMan"."PersonID" = ',$PersonID);
如果你的PersonID是prime key,那么你抓到的record只有一条,那么用
$row = $data->row();
echo  $row->PersonID;
就用不到foreach巡回了

如果不是主键,确实可能返回多条记录的话要用foreach($data->result() AS $row)...

你也可以用var_dump($data);看看$data到底返回的是什么
 楼主| 发表于 2008-11-6 14:19:19 | 显示全部楼层
PersonID是prime key是沒錯但是我在它為空值時or_where其他的條件
確實可能返回多條記錄
它反迴bool(false)
是那裡出了錯?

本版积分规则