首页 > 解决方案 > 将成功插入的记录捕获到数组中

问题描述

我正在使用 PDO 将记录从一个表插入到另一个表中。

我正在尝试捕获成功插入到另一个表中的记录,同时还捕获可能无法插入的记录。

<?php
  $checkcontainer = $_POST['checkcontainer'];
  $checkscac = $_POST['checkscac'];
  $comment = $_POST['comment'];
  $time = date('Y-m-d H:i:s');

  $containerSuccess = array();
  $containerFail = array();

  $count = count($checkcontainer);

  for($i = 0; $i < $count; $i++)
  {
    $container = $checkcontainer[$i];
    $scac = $checkscac[$i];

    $insert = $dbc->prepare("INSERT IGNORE INTO trucker_edi_comms (container, scac, fac_comments, fac_datestamp) VALUES (:ucont,:uscac,:ucomm,:utime);");

    $insert->execute([
        'ucont' => $container,
        'uscac' => $scac, 
        'ucomm' => $comment,
        'utime' => $time
    ]);

    if($insert)
    {
        $containerSuccess = $container;
        //echo "containers saved: " . $containerSuccess;
    }
    else
    {
        $containerFail = $container;
        //echo "containers failed: " . $containerFail;
    }
  }

  echo "containers saved: " . $containerSuccess;
?>

INSERT 语句有效。我还可以将 $containerSuccess 数组设置为 $container。如果成功插入 3 个容器,则 FOR 循环内部的输出如下所示:

containers saved: TEST123456789containers saved: TEST98642357containers saved: TEST65897531

但我需要能够在 FOR 循环之外回显 $containerSuccess。目前,输出如下所示:

containers saved: TEST65897531

我只能抓住最后一个保存的容器。

我需要回显 FOR 循环之外的所有容器以显示给用户。

我怎样才能做到这一点?

标签: phpmysqlarrayspdo

解决方案


您的示例试图用字符串填充声明的数组,因此您在关于变量类型的正确轨道上。您可以在循环完成后填充一个数组以输出保存/失败的容器,如果您希望它在一行上输出,请使用implode()输出:

<?php
  $checkcontainer = $_POST['checkcontainer'];
  $checkscac = $_POST['checkscac'];
  $comment = $_POST['comment'];
  $time = date('Y-m-d H:i:s');

  $containerSuccess = array();
  $containerFail = array();

  $count = count($checkcontainer);

  for($i = 0; $i < $count; $i++)
  {
    $container = $checkcontainer[$i];
    $scac = $checkscac[$i];

    $insert = $dbc->prepare("INSERT IGNORE INTO trucker_edi_comms (container, scac, fac_comments, fac_datestamp) VALUES (:ucont,:uscac,:ucomm,:utime);");

    $insert->execute([
        'ucont' => $container,
        'uscac' => $scac, 
        'ucomm' => $comment,
        'utime' => $time
    ]);

    if($insert)
        $containerSuccess[] = $container;
    else
        $containerFail[] = $container;

  }

  echo "containers saved: " . implode(', ', $containerSuccess);
  echo "containers failed: " . implode(', ', $containerFail);

?>

推荐阅读