Php 为什么我的codeigniter数据库查询在它成功搜索的字段上返回NULL
我真的很困惑,为什么我的item_id会得到一个空值,这是我表中的一个必填字段,也是我首先搜索的内容 以下是我的控制器的相关部分:Php 为什么我的codeigniter数据库查询在它成功搜索的字段上返回NULL,php,sql,codeigniter,activerecord,Php,Sql,Codeigniter,Activerecord,我真的很困惑,为什么我的item_id会得到一个空值,这是我表中的一个必填字段,也是我首先搜索的内容 以下是我的控制器的相关部分: $item_id=$this->uri->segment(4); $page_data['row'] = $this->item_model->get_item($item_id, TRUE); var_dump($page_data['row']); 这是我的模型: function get_item($id, $admin=FALSE)
$item_id=$this->uri->segment(4);
$page_data['row'] = $this->item_model->get_item($item_id, TRUE);
var_dump($page_data['row']);
这是我的模型:
function get_item($id, $admin=FALSE){
$this->db
->select('*')
->from('item_entries')
->where('item_entries.item_id', $id)
->join('item_categories_rel', 'item_categories_rel.item_id = item_entries.item_id')
->join('item_descriptions', 'item_descriptions.item_id = item_entries.item_id')
->join('ratings_total', 'ratings_total.item_id = item_entries.item_id')
->join('item_categories', 'item_categories.cat_id = item_categories_rel.cat_id');
if($admin==TRUE){
$this->db
->join('admin_item_alerts', 'admin_item_alerts.item_id = item_entries.item_id')
->join('item_object_code', 'item_object_code.item_id = item_entries.item_id', 'left');
}
$query = $this->db->get();
return $query->row_array();
}
下面是var_转储的输出:
array(21) { ["item_id"]=> NULL ["item_name"]=> string(9) "MediaInfo" ["item_img"]=> string(13) "mediaInfo.gif" ["item_link"]=> string(42) "http://sourceforge.net/projects/mediainfo/" ["is_code"]=> string(1) "n" ["is_pick"]=> string(1) "n" ["is_quicklink"]=> string(1) "n" ["date_added"]=> string(19) "2010-10-01 00:03:04" ["rel_id"]=> string(3) "132" ["cat_id"]=> string(2) "10" ["item_desc"]=> string(9) "desc_here" ["site_rating"]=> string(3) "3.0" ["urate_ave"]=> string(3) "0.0" ["parent_id"]=> string(1) "2" ["gparent_id"]=> string(1) "0" ["sort_order"]=> string(1) "0" ["cat_name"]=> string(2) "PC" ["cat_slug"]=> string(2) "pc" ["date_checked"]=> string(19) "0000-00-00 00:00:00" ["UpCode"]=> string(1) "N" ["item_code"]=> NULL }
有人知道它为什么这样对我吗:(?您遇到的问题是,您选择了几个名为
item\u id
的列,因此结果将获取最后一个名为item\u id的列。要解决此问题,您需要不选择联接表的item\u id,或者为主表item\u id使用别名:
$this->db->select('item_entries.item_id AS the_id')
(当然,您还需要在表中包含其他列。*语法)您没有收到字段项\u id的多个响应吗?我会将响应重命名为…如果我通过phpmyadmin以SQL的形式运行它,我确实会这样做-但这不会在任何其他具有多个响应的字段查询中造成问题。如何使用AS in AR重命名响应?您只需将其与普通mysql syn一样放在select语句中即可tax$this->db->select('item_id AS myid');当查询结果中有多个同名列时,
$query->row_array()
将仅保留该名称的最后一列的值。如果在您的其他查询中,相同名称列的最后一个实例包含了您期望的值,那么您没有看到任何负面影响也就不足为奇了。我的最终联接可能包含也可能不包含匹配项。在链中向前移动此联接可解决以下问题:问题,这是否是一种糟糕的做法?我是否最好使用$this->db->select('item_id AS myid')解决方案?这有关系吗?