【问题标题】:Update database field with array in CodeIgniter在 CodeIgniter 中使用数组更新数据库字段
【发布时间】:2012-08-27 15:10:07
【问题描述】:

我再次发现自己在 stackoverflow 社区的摆布下!

我已经将 CodeIgniter 用于我的 PHP 项目,到目前为止一切顺利,但我在尝试使用一些帖子数据更新数据库字段时遇到了困难。

我的数组是通常的:array(name => value, name => value, name => value); 这又是从提交的 $_POST 数据中填充的。

与数组类似,我有一个包含 2 个字段的数据库表:settingvalue,其中 setting 下的名称对应于数组键和 到数组键的值。

(我解释的对吗?)

尽管如此,我已经尝试了一段时间以使其正常工作,但是,我真的只是在黑暗中挥舞着双手。

我希望你们中的一些聪明人可以帮助我解决这个烦人的问题!

编辑:

感谢所有回复的人!我设法使用以下代码产生了我想要的结果:

    foreach ($form_data as $key => $val)
    {
        $this->db->where ('setting', $key);
        $this->db->set ('value', $val);
        $this->db->update ('recruitment');
    }

现在,我尝试通过添加以下内容来跟进:

    if ($this->db->affected_rows() >= '1') { return true; }
    return false;

对于我的模型,并且

        if ($this->RecruitmentSettings->Update($form_data) == TRUE)
        {
            redirect('recruitment/success');
        }

到我的控制器,但它根本没有按预期工作。任何想法我做错了什么?

【问题讨论】:

    标签: php database codeigniter


    【解决方案1】:

    这里有很多问题。您是否已经在数据库中有值并且想要更新它们?还是您想每次都输入新数据?答案取决于此。

    您想要的是活动记录类的insert_batch()update_batch() 方法(如果这是您用于数据库的方法)。

    foreach($post_array as $key => $value)
    {
        $settings[] = array(
            'setting' => $key,
            'value' => $value
        );
    }
    
    $this->db->insert_batch('your_db_table', $settings);
    

    或者,对于更新:

    $this->db->update_batch('your_db_table', $settings, 'setting');
    

    您可以进行查询以检查设置并根据是否有结果执行insert_batchupdate_batch。如果您想每次都插入,您可以在插入之前删除表中的行。但是,如果没有交易,我不会这样做。

    【讨论】:

    • 我尝试了这种方法,但它产生了错误“您必须指定一个索引以匹配批量更新。” 我真的不明白。嗯。
    • localhost/user_guide/database/active_record.html#updateupdate_batch 采用第三个参数,即“where”子句...(要匹配的索引)。在这种情况下,将其设置为“设置”:$this->db->update_batch('your_db_table', $settings, 'setting');
    • 就是这样!它工作得很好。连同我上面添加的受影响的行()代码,它是满足我需求的完美解决方案。
    • 我刚刚意识到我从本地 CI 用户指南副本中复制了链接!哎呀!正确链接:codeigniter.com/user_guide/database/active_record.html#update
    【解决方案2】:

    所以你想将数组数据存储在数据库中?你可以这样做

    型号

    foreach ($data as $key => $item)
    {
          $this->db->set ('setting', $key);
          $this->db->set ('value', $item);
          $this->db->insert ('table_name');
    }
    return ($this->db->affected_rows() > 0);
    

    控制器

    if ($this->RecruitmentSettings->Update($form_data))
    {
    
     redirect('recruitment/success');
    }
    else
    {
         echo "error";
    }
    

    【讨论】:

    • 这行不通,因为您没有使用对象。您需要执行 foreach($data as $key => $value) ,然后使用 $key 进行设置,使用 $value 进行值。看我的回答。箭头符号不适用于数组 AFAIK。您会收到“尝试访问非对象的属性”之类的错误。
    • 其实,如果你想让它工作,你需要在主数组内做子数组。 IE。 array( array('name'=>name,'value'=>value), array('name'=>name,'value'=>value)) 等与您当前编写代码的方式。但是你可以使用foreach($array as $key => $value)
    • 不,你不需要做子数组。如果您有一个简单的数组并执行“foreach” - php 会为每个项目拆分简单的数组。我只是尝试确认 - 它有效
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 2017-09-04
    • 2012-08-31
    • 1970-01-01
    相关资源
    最近更新 更多