为什么只有最后一个插入 id入到 db on foreach 上


Why only the lastinsertid being inserted in db on foreach?

我正在使用一个foreach循环,它将变量$thread_id分配给lastInsertId()的值。

然后,$thread_id 将插入到申请人表中。

我遇到的问题是它将循环中的最后一个值插入到所有行中。但奇怪的是,当我将 $thread_id 输出到控制台时,每次循环迭代时它都会显示不同的值。

例如,当我在控制台中输出 $thread_id 时,它显示这个

1,2,3,4,5,6

然后当我查看申请人表中的所有行时,我看到这个

666666

我真的很困惑为什么会发生这种情况。如果有人能帮助我解决这个问题,我将不胜感激。下面是我的代码。

$msg_table_insert = $db->prepare("INSERT INTO msg_messages (
                  sender_id,recipient_id,msg ) VALUES (
                  :sender_id, :recipient_id, :msg)");
        $applicant_update_query = $db->prepare("UPDATE applicants SET thread_id = :thread_id ");

foreach($applicants as $applicant) 
{
 if($thread_id == 0){
    $msg_table_insert->execute(
        [':sender_id'   => $applicant_array[SENDER_ID], 
        ':recipient_id' => $applicant_array[RECIPIENT_ID], 
        ':msg'          => $templated_msg_body]);
    $thread_id = $db->lastInsertId();
    $applicant_update_query->execute([':thread_id' =>  $thread_id ]);
}
    }

有人解决了你的错误,但除此之外,为什么? 您使用 lastinsertId() 更新行中的字段; 刚插入后。 您应该为此定义一个字段,以便 mysql 自动为您执行此操作。