Codeigniter 仅更新第一行

Posted

技术标签:

【中文标题】Codeigniter 仅更新第一行【英文标题】:Codeigniter update only the first row 【发布时间】:2014-09-09 14:23:11 【问题描述】:

我正在尝试使用 CodeIgniter 的“更新”活动记录来更新 mysql 表中的列。但是,我只能更新我放入的数组的第一行。我做错了什么?

代码:

       $invalid_email_raw='raphael@live.com;
                           fadfds@qq.com;
                           fsd@qq.com;
                           df@qq.com';

       $invalid_email=explode(';', $invalid_email_raw);

       foreach ($invalid_email as $email):

            $data=array(
                'status'=>'unsubscribed'
                );

            $this->db->where('email', $email);
            $this->db->update('user', $data);

        endforeach;

本质上,代码将 4 封邮件分解为一个数组,并使用 foreach 更新找到该邮件的相应状态。

但是,只有“raphael@live.com”的状态会更新。其他 3 个不变。

我做错了什么?

【问题讨论】:

你为什么不做一个查询呢? 不知道该怎么做...介意举个例子吗? 在单个查询中,您可以使用批量更新$this->db->update_batch(); 谢谢,但由于我的技能有限,我仍然无法弄清楚确切的方法。非常感谢用这种方法回答我的问题! 请参阅下面的Parag Tyagi 答案。这就是你的做法。它的执行速度也更快。 【参考方案1】:

因为您的更新查询在循环中,并且如果每个时间条件都满足,所以它会更新所有四个的状态。

【讨论】:

但现在它只更新第一个,而不是全部 4 个【参考方案2】:

您正在使用换行符,爆炸后您有:

raphael@live.com\nfadfds@qq.com\nfsd@qq.com\ndf@qq.com

\n 是新行。因此,在该更新中仅匹配第一封电子邮件。

【讨论】:

使用 print_r($invalid_email) 我得到: Array ( [0] => raphael@live.com [1] => fadfds@qq.com [2] => fsd@qq.com [ 3] => df@qq.com)。那还是换行符吗? 是的。检查View Page Source,你会看到this。【参考方案3】:

使用 update_batch(),也可以使用 array_map() 修剪您的数组值。试试下面的代码,

$invalid_email_raw = 'raphael@live.com;
                       fadfds@qq.com;
                       fsd@qq.com;
                       df@qq.com';

$invalid_email = array_map('trim', explode(';', $invalid_email_raw));

$data = array();
foreach($invalid_email as $email)

    $data[] = array(
                  "email" => $email,
                  "status" => "unsubscribed"
               );


if(!empty($data))

    $this->db->update_batch('user', $data, 'email');

【讨论】:

请将$this->db->update_batch('user', $data, 'email'); 包裹在if (!empty($data)) 中,否则如果$invalid_email 列表中没有电子邮件,他可能会收到错误消息。

以上是关于Codeigniter 仅更新第一行的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter - 数据库结果数组,但只有一行

CodeIgniter 查询结果仅在视图中显示最后一行

如何根据codeigniter中的时间戳获取数据?

插入批处理,如果在Codeigniter 3 HMVC中有重复的密钥更新

INSERT Batch,如果在 codeigniter 中重复键更新

获取 CodeIgniter ActiveRecord 结果中每一行的关联数组