我在Codeigniter做一个项目。在这里,我使用imap从我的gmail id中获取最新的10封邮件。我想从获取邮件的from字段获取,我想检查已获取邮件的from字段是否在我的数据库table('clients')
中。在这里,我将10个从已获取邮件的字段存储到数组,并将其传递给模型,其中检查正在进行并返回匹配的字段名称。但它不适合我。
我的控制器功能是:
if ($mbox = imap_open($authhost, $user, $pass)) {
$emails = imap_search($mbox, 'ALL');
$some = imap_search($mbox, 'SUBJECT "Suspicious sign in prevented"', SE_UID);
$MC = imap_check($mbox);
$inbox = $MC->Nmsgs;
$inboxs = $inbox - 9;
if ($emails) {
$data['overview'] = imap_fetch_overview($mbox, "$inboxs,$inboxs:$inbox", 0);
$i = 0;
foreach ($data['overview'] as $i => $val) {
$from[$i] = $val->from;
$i++;
}
$data['result'] = $this->crm_model->get_names($from);
foreach ($data['result'] as $row) {
echo $row->name;echo "<br/>";
}
}
imap_close($mbox);
}
我的模特功能是:
function get_names($from) {
$this->db->select('name');
$this->db->from('clients');
$this->db->where_in('name', $from);
$query = $this->db->get();
return $query->result();
}
但是当我使用上面的模型函数时,它会返回值
function get_names() {
$options = array(
'0' => 'Job Openings',
'1' => 'Offers',
'2' => 'Techgig',
'3' => 'Australia',
);
$this->db->select('name');
$this->db->from('clients');
$this->db->where_in('name', $options);
$query = $this->db->get();
return $query->result();
}
我认为问题在于将值从控制器传递到模型。谁能帮我。提前致谢
答案 0 :(得分:2)
使用where_in(逗号分隔值列表)在数据库中执行任何查询时, 值列表应该像这个数组:
$options = array('Hello', 'World!', 'Beautiful', 'Day!');
不喜欢这样:
$options = array('0' => 'Job Openings','1' => 'Offers','2' => 'Techgig','3' =>'Australia',);
这样做你应该破坏这个阵列!
$opt=implode(",",$options);
并将此$ opt数组传递给WHERE_IN()
希望这能解决您的问题!
答案 1 :(得分:1)
您不必使用$i
..
if ($emails) {
$data['overview'] = imap_fetch_overview($mbox, "$inboxs,$inboxs:$inbox", 0);
// $i = 0;
foreach ($data['overview'] as $val) {
$from[] = $val->from;
//$i++;
}
$data['result'] = $this->crm_model->get_names($from);
foreach ($data['result'] as $row) {
echo $row->name;echo "<br/>";
}
}
进行这些更改并检查