Захват успешно вставленных записей в массив - PullRequest
0 голосов
/ 22 марта 2019

Я использую 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

Но мне нужно иметь возможность отображать $ containerSuccess вне цикла FOR. В настоящее время вывод выглядит так:

containers saved: TEST65897531

Я могу взять только последний сохраненный контейнер.

Мне нужно отобразить все контейнеры вне цикла FOR для отображения пользователю.

Как я могу это сделать?

1 Ответ

1 голос
/ 22 марта 2019

Ваш пример пытался заполнить объявленный массив строкой, поэтому вы были на правильном пути относительно типа переменной. Вы можете заполнить массив для вывода сохраненных / неудачных контейнеров после завершения цикла, и если вы хотите, чтобы он выводился в одной строке, используйте 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);

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...