You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP循环为MySQL中所有user_id批量存储相同Payload?

问题:批量插入通知数据到news表

前端有一个可填写标题、消息和日期的表单,点击提交后,数据会存入数据库news表,但user_id字段始终为NULL(未指定用户ID)。由于需要给大量用户发送通知,希望从user表中获取所有user_status为1的user_id,为每个用户插入相同的标题、消息和日期数据。

现有代码

function set_news($form_data)
{
    $data = array(
        'title' => $form_data['title'],
        'message' => $form_data['message'],
        'date' => $form_data['date'],
        
    );
    $this->db->select('user_id')->from('user')->where('user_status', 1);
    $query =  $this->db->get();

    foreach ($query->result_array() as $val) {
        $value[$val['user_id']] = $val['user_id'];
    }
    
    $this->db->insert('news', $data);
}

期望效果

插入后news表数据如下:

titlemessagedateuser_id
GreetingHello12/06/231001
GreetingHello12/06/231002
GreetingHello12/06/231003
GreetingHello12/06/231004
GreetingHello12/06/231005
GreetingHello12/06/231006

解决方案

原代码的问题在于:循环获取用户ID后未将其加入插入数据,且仅执行了一次插入操作,导致user_id始终为NULL。下面提供两种可行的修改方案:

方案1:循环单条插入

逐个为每个用户插入数据,逻辑简单直观:

function set_news($form_data)
{
    // 定义基础数据模板
    $base_data = array(
        'title' => $form_data['title'],
        'message' => $form_data['message'],
        'date' => $form_data['date'],
    );

    // 获取所有状态为1的用户ID
    $this->db->select('user_id')->from('user')->where('user_status', 1);
    $query = $this->db->get();

    // 循环每个用户,插入带user_id的数据
    foreach ($query->result_array() as $user) {
        $insert_data = $base_data;
        $insert_data['user_id'] = $user['user_id'];
        $this->db->insert('news', $insert_data);
    }
}

方案2:批量插入(推荐)

将所有待插入数据整理为数组后一次性插入,减少数据库交互次数,性能更优:

function set_news($form_data)
{
    // 定义基础数据模板
    $base_data = array(
        'title' => $form_data['title'],
        'message' => $form_data['message'],
        'date' => $form_data['date'],
    );

    // 获取所有状态为1的用户ID
    $this->db->select('user_id')->from('user')->where('user_status', 1);
    $query = $this->db->get();

    // 批量整理插入数据
    $insert_batch = array();
    foreach ($query->result_array() as $user) {
        $row = $base_data;
        $row['user_id'] = $user['user_id'];
        $insert_batch[] = $row;
    }

    // 执行批量插入(需确保数据数组非空)
    if (!empty($insert_batch)) {
        $this->db->insert_batch('news', $insert_batch);
    }
}

内容的提问来源于stack exchange,提问作者philtatos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 11:03:14