将数组的所有行插入MySql表 - 与Codeigniter相关

时间:2014-07-05 01:22:49

标签: php mysql sql codeigniter

我正在尝试输入100个以';'分隔的电子邮件地址并将它们存储在MySql表中。到目前为止我尝试过的是:

    $recipient_raw = $this->input->post('recipient'); //get the 100 emails in $recipient_raw
    $recipient_array=explode(';', $recipient_raw);  //explode them into an array
    $title = $this->input->post('title');
    $body = $this->input->post('body');

    foreach($recipient_array->result() as $row): 
    $recipient=array(
    'email'=>$row->email             //looping through each email; seems I should not use $row->email since there's no title for them
    );

    $this->db->insert('eamil_send',$this->db->escape($recipient));
    endforeach;

我在CodeIgniter PHP上运行它。错误消息是在线foreach($ recipient_array-> result()为$ row):,其中它表示:在非对象上调用成员函数result()

任何建议表示赞赏!谢谢!

3 个答案:

答案 0 :(得分:1)

result(),是用于转换数据库结果对象的活动记录函数。您正在创建标准数组。

$batch = array();
foreach($recipient as $row){
    $batch[] = array(
        'email' => $row
    );
}
$this->db->insert_batch('email_send', $batch);

那应该做你想要完成的事情。

答案 1 :(得分:1)

错误信息非常自我解释..

  • 在代码的第二行中,您将$ recipient_array声明为Array(),而不是对象。所以,没有“结果”方法可用。 你的循环应该是

    foreach($ recipient_array as $ row)

  • 另外,您可能不应该在循环中执行db操作(特别是100次操作!)。相反,您应该将所有查询保存在一个大查询字符串中并在最后执行。

答案 2 :(得分:0)

如果您希望100个电子邮件地址与','分开,则应使用implode(glue,pieces)而不是explode()函数。就像你要插入的电子邮件地址一样。

$recipient_raw = array();
$recipient_raw[] = $this->input->post('recipient');

foreach ($recipient_raw as $value) {

        $tem_arr = implode(',', $value);
    }

$this->db->insert('eamil_send',$this->db->escape($tem_arr));