如何使用pdo准备好的语句处理具有相等数量对象的4个数组,将其插入到mysql数据库中

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

我正在尝试将我公司的股票数据插入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;
}

我一整天都在尝试浏览网站以找到适当的现有答案,但未能找到答案。

我的问题是,是否有可能这样做,如果是,最好的方法是什么?

感谢您的期待。

php mysql arrays pdo
2个回答
1
投票

这将在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;
}

0
投票

您几乎在那里,只是您使用错误的参数执行查询。

而且,也不需要额外的$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;
}
© www.soinside.com 2019 - 2024. All rights reserved.