[英]Codeigniter DB Query chaining wrong data from previous calls
这就是我模型中的内容。 我继承了其他人的代码并尝试对其进行清理(尚无法更改列名称)
$ad_where = array('id'=>$id, 'client'=>$this->brand->client['id']);
$this->db->select('id, client, user, code, heading, subhead, `from`, `to`, openings, view_only, publish, closed')->limit(1);
$query = $this->db->get_where('adverts', $ad_where);
if( $query->num_rows() > 0 ){
$row = $query->row_array();
if( $row['heading'] == 'n/a' ){
$row['heading'] = $this->job_title_heading($row['id'], $row['client']);
}
return $row;
}
return FALSE;
CodeIgniter返回以下输出错误:
错误号:1066
不是唯一的表格/别名:“广告”
SELECT `id`, `client`, `user`, `code`, `heading`, `subhead`, `from`, `to`, `openings`, `view_only`, `publish`, `closed` FROM (`adverts`, `adverts`, `adverts`, `adverts`, `adverts`, `adverts`, `adverts`, `adverts`, `adverts`, `adverts`) INNER JOIN `advert_location_links` ON `advert_location_links`.`advert`=`adverts`.`id` INNER JOIN `advert_location_links` ON `advert_location_links`.`advert`=`adverts`.`id` INNER JOIN `advert_location_links` ON `advert_location_links`.`advert`=`adverts`.`id` INNER JOIN `advert_location_links` ON `advert_location_links`.`advert`=`adverts`.`id` INNER JOIN `advert_location_links` ON `advert_location_links`.`advert`=`adverts`.`id` INNER JOIN `advert_location_links` ON `advert_location_links`.`advert`=`adverts`.`id` INNER JOIN `advert_location_links` ON `advert_location_links`.`advert`=`adverts`.`id` INNER JOIN `advert_location_links` ON `advert_location_links`.`advert`=`adverts`.`id` INNER JOIN `advert_location_links` ON `advert_location_links`.`advert`=`adverts`.`id` WHERE (truncated) LIMIT 1
添加的JOIN来自上一条语句。
我尝试添加
$this->db->stop_cache();
$this->db->flush_cache();
但这无济于事
编辑:上一个调用未重置该语句,因为它的格式不正确,尽管它似乎执行了,但未正确完成。 这是一个count_all / count_all_results()调用,我将其更改为SELECT语句,并使用num_rows()获得总结果。
您确定以得到一些结果结束上一个查询吗? 因为如果您将其挂起,它将与下一条语句链接在一起。
尝试一次调用$ this-> db-> result(); 在开始此查询以测试没有任何等待之前。
如果我可以重写您的代码,它将像这样:
$row = $this->db
->select('id, client, user, code, heading, subhead, from, to, openings, view_only, publish, closed')
->get_where('adverts', array('id'=>$id, 'client'=>$this->brand->client['id']))
->limit(1)
->row();
if(!$row)
return false;
if($row['heading'] == 'n/a' )
$row['heading'] = $this->job_title_heading($row['id'], $row['client']);
return $row;
建议您在转义字符串后直接放置查询。 CodeIgniter的查询生成器存在很多问题,并且在有多个调用时无法正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.