Как обрабатывать 4 массива с равным количеством объектов для вставки в базу данных mysql, используя подготовленные операторы pdo - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь вставить данные об акциях моей компании в базу данных mysql. У меня есть четыре массива типа следующим образом:

$lot_number = array(1, 2, 3, 4, 5);
$serial_begin = array(1, 51, 101, 151, 201);
$serial_last = array(50, 100, 150, 200, 250);
$identifier = array(FA2567, FA2568, FA2569, FA2570, FA2571);

Я пытаюсь создать массив массивов следующим образом:

$data = array($lot_number, $serial_begin, $serial_last, $identifier);

И используя подготовленный оператор PDO со следующим сценарием:

$stmt = $pdo->prepare("INSERT INTO shares_fclass 
                        (lot_number, serial_begin, serial_last, identifier) 
                        VALUES (?, ?, ?, ?)");

try {
    $pdo->beginTransaction();
    foreach ($data as $key => $lotnumber)
    {
        $stmt->execute($key);
    }
    $pdo->commit();
}catch (Exception $e){
    $pdo->rollback();
    throw $e;
}

Я целый день пробовал копаться на сайте, чтобы найти подходящий существующий ответ, но не смог его найти.

Мой вопрос: возможно ли это сделать, и если да, каков наилучший способ сделать это?

Спасибо в ожидании.

Ответы [ 2 ]

2 голосов
/ 21 января 2020

Это позволило бы получить правильные вхождения из 4-х массивов и поместить их в правильный фрагмент запроса, при условии, что во всех 4-х массивах всегда есть одинаковое количество вхождений

$lot_number = array(1, 2, 3, 4, 5);
$serial_begin = array(1, 51, 101, 151, 201);
$serial_last = array(50, 100, 150, 200, 250);
$identifier = array('FA2567', 'FA2568', 'FA2569', 'FA2570', 'FA2571');

$stmt = $pdo->prepare("INSERT INTO shares_fclass 
                            (lot_number, serial_begin, serial_last, identifier) 
                     VALUES (?, ?, ?, ?)");

try {
    $pdo->beginTransaction();

    foreach ($lot_number as $key => $lotnumber) {
        $stmt->execute([$lotnumber, $serial_begin[$key], $serial_last[$key] , $identifier[$key] ]);
    }
    $pdo->commit();
}catch (Exception $e){
    $pdo->rollback();
    throw $e;
}
1 голос
/ 21 января 2020

Вы почти у цели, только если вы выполняете запрос с неверными параметрами.

Кроме того, нет необходимости в дополнительной переменной $data.

$lotNumber = [1, 2, 3, 4, 5];
$serialBegin = [1, 51, 101, 151, 201];
$serialLast = [50, 100, 150, 200, 250];
$identifier = ['FA2567', 'FA2568', 'FA2569', 'FA2570', 'FA2571'];

$stmt = $pdo->prepare("INSERT INTO shares_fclass 
                        (lot_number, serial_begin, serial_last, identifier) 
                        VALUES (?, ?, ?, ?)");

try {
    $pdo->beginTransaction();

    for ($i = 0; $i < count($lotNumber); $i++) {
        $stmt->execute([
            $lotNumber[$i],
            $serialBegin[$i],
            $serialLast[$i],
            $identifier[$i]
        ]);
    }

    $pdo->commit();
} catch (Exception $e){
    $pdo->rollback();
    throw $e;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...