Codeigniter在where子句中的未知列?

时间:2015-04-13 14:45:19

标签: php mysql codeigniter

我正在尝试使用下拉菜单在Codeigniter中创建更新功能。不幸的是,当我点击提交时,我得到一个错误,我的where子句中有一个“未知列'stages.id'。我在代码的其他部分使用了stages.id来更新其他字段,但我不确定为什么会发生这种情况。对于为什么会发生这种情况的任何帮助或想法都将不胜感激!

function update_stage_name($id){

  $stage_name=array(
    'stage_name'=>$this->input->post('stage_name')
  );

  $this->db->where('stages.id', $id);
  $this->db->update('stage_names', $stage_name);

}

根据错误,这是数据库查询的样子:

UPDATE `stage_names` SET `stage_name` = 'Holly' WHERE `stages`.`id` = '264'

我有几张桌子,而舞台则是主要的。每个阶段只有一个stage_name,但stage_name可以属于多个阶段。 Stage_name没有来自阶段的外键,但stage具有stage_name_id。

编辑:所以似乎问题实际上是我想要更新阶段表,而不是stage_names表。但问题是阶段表有stage_name_id但我的表单输入是stage_name。如何以相同的方法获取id?我仍然是活跃的记录和codeigniter的新手,我不知道如何继续。

2 个答案:

答案 0 :(得分:1)

正如错误所示,您没有可以使用stages.id引用的列。主要是因为它错了表..

尝试..

UPDATE `stage_names` SET `stage_name` = 'Holly' WHERE `stage_names`.`id` = '264'
//Note changed the table name in the where

如果您需要使用stages.id和(正如您在评论中所说)您没有FK,那么您将需要创建一个,因为数据库不够智能,无法猜测它。因此,一旦您在stages_names中有一个名为stage_id(或类似)的字段,您就可以这样做..

UPDATE `stage_names` SET `stage_name` = 'Holly' WHERE `stage_id` = '264'

答案 1 :(得分:0)

试试这个:

function update_stage_name($id) {
    $stage_name=array(
        'stage_name'=> $this->input->post('stage_name')
    );

    $this->db->where('stage_names.id', (int)$id);
    $this->db->update('stage_names', $stage_name);
}