如何在codeigniter中更新具有相同名称的多个输入?

时间:2012-08-30 13:50:57

标签: php codeigniter

这是我到目前为止所拥有的

控制器

       $i = 0;
     foreach ($this->input->post('skill') as $cat) {
     $data[$i++]['skill'] = $cat;
     }
     $this->db->update_batch('skills', $data); 
    }

模型

function update_record($data) 
{

    $this->db->update('skills', $data); 
   }

查看

          <?php foreach ($skills as $skill):?>

<input type="text" name="skill[]" value="<?php echo $skill->skill;?>">

                <?php endforeach?>

我收到了数据库错误

You must specify an index to match on for batch updates.

请帮我解决这个问题我试过谷歌搜索,没有任何事情发生。

1 个答案:

答案 0 :(得分:1)

好的,这是问题所在。 根据{{​​3}},您需要添加第三个参数,即where键。以下是文档中的示例。

$data = array(
   array(
      'title' => 'My title' ,
      'name' => 'My Name 2' ,
      'date' => 'My date 2'
   ),
   array(
      'title' => 'Another title' ,
      'name' => 'Another Name 2' ,
      'date' => 'Another date 2'
   )
);

$this->db->update_batch('mytable', $data, 'title');

因此,在查询的上方,标题列是与行进行比较的内容。因此,对于标题为“我的标题”的行,第一个数组元素用作更新,而对于那些具有“另一个标题”的第二个元素。我希望你明白。如果我们没有比较字段,那么整个数据库将被更新:-P

以下是从上述操作中产生的最终查询。

 UPDATE `mytable` SET `name` = CASE
 WHEN `title` = 'My title' THEN 'My Name 2'
 WHEN `title` = 'Another title' THEN 'Another Name 2'
 ELSE `name` END,
 `date` = CASE
 WHEN `title` = 'My title' THEN 'My date 2'
 WHEN `title` = 'Another title' THEN 'Another date 2'
 ELSE `date` END
 WHERE `title` IN ('My title','Another title')

希望这有帮助。