我试图通过使用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个都没有改变。
我做错了什么?
答案 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)
因为你的更新查询是循环的,并且每次条件都满足所以它会更新所有四个的状态。