捕获成功插入的记录到数组中

问题描述 投票:0回答:1

我正在使用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循环之外的所有容器以显示给用户。

我怎样才能做到这一点?

php mysql arrays pdo
1个回答
1
投票

您的示例尝试使用字符串填充声明的数组,因此您在关于变量类型的正确轨道上。在循环完成后,您可以填充数组以输出已保存/失败的容器,如果您希望在一行上输出,请使用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);

?>
© www.soinside.com 2019 - 2024. All rights reserved.