4

私は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();
    }

問題は、コントローラーからモデルに値を渡すことにあると思います。誰でも私を助けることができますか?前もって感謝します

4

2 に答える 2

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() に渡します

これで問題が解決することを願っています!

于 2012-12-27T06:33:20.570 に答える
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/>";
                }

            }

これらの変更を行い、確認してください

于 2012-12-27T05:31:37.820 に答える