Codeigniter仅更新第一行

时间:2014-07-18 12:32:27

标签: php mysql codeigniter activerecord foreach

我试图通过使用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个都没有改变。

我做错了什么?

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

使用 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');
}

答案 2 :(得分:0)

因为你的更新查询是循环的,并且每次条件都满足所以它会更新所有四个的状态。