繁体   English   中英

Codeigniter DB查询链接先前调用中的错误数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM