寻找使用 PDO 将 PHP 数组插入 SQL 数据库的解决方案


Looking for solution to insert PHP array to SQL database by using PDO

这是我的订单详细信息数组,数组结构将是:"ids" => "qtys":

    $orderData = array();
    $transactionID = 1;
    $orderItems = $_POST['orders'];
        //echo json_encode($orderItems);
    foreach ($orderItems as $order){
            $qtys = $order['qty']; //Which will be "quantity" insert into database;
            $ids =  $order['id']; //Which will be "itemID" insert into database;
            $orderData["$ids"]=$qtys;
        }

现在我正在寻找将数组推送到数据库中的解决方案:

  $sql = "INSERT INTO item_transaction (transactionID,itemID,quantity) VALUES ($transactionID,?,?)" ;

我应该如何继续?

您可以使用 bindParam 将其插入循环中。

像...

$stmt = $conn->prepare("INSERT INTO item_transaction transactionID,itemID,quantity) VALUES (:transactionId,:itemId,:qty)");
$stmt->bindParam(':transactionId', $transactionID );
$stmt->bindParam(':itemId', $itemID);
$stmt->bindParam(':qty', $quantity);
foreach ($orderItems as $order){
     $quantity = $order['qty'];
     $itemID =  $order['id']; 
     $stmt->execute();
}

不幸的是,您没有提供 DDL,也没有显示某些数据的来源($transactionID?

<?php
class Handler {
    public $dbHostname      = 'DATABASE-HOSTNAME-OR-IPADDRESS-GOES-HERE';
    public $dbDatabaseName  = 'MYSQL-DBNAME-GOES-HERE';
    public $user            = 'DATABASE_USERNAME';
    public $password        = 'DATABASE_PASSWORD';
    //public $port = 3307;
    public $message;
    public function handleRequest($arg) {
        $orderItems = $arg['orders'];
        try  {
            $portChunk = ( isset($this->port) ) ? ';port=' . $this->port : null;
            $dsn = "mysql:dbname={$this->dbDatabaseName};host={$this->dbHostname}{$portChunk}";
            $pdo = new PDO($dsn, $this->user, $this->password);
            $transactionID = 1;
            $stmt = $pdo->prepare("INSERT INTO item_transaction transactionID, itemID, quantity) VALUES (?, ?, ?)");
            foreach ($orderItems as $order){
                $stmt->execute([$transactionID, $order['id'], $order['qty']]);
            }
        }
        catch(PDOException $e) {
            $this->log('Failed: ' . $e->getMessage());
        }
    }
}
// Change the following to false to test from the web.
$commandLine = true;
$handler = new Handler();
if ( $commandLine ) {
    // run from command line
    $handler->handleRequest(['orders' => 
        ['qty' => 9,  'id' => 111],
        ['qty' => 4,  'id' => 222],
        ['qty' => 11, 'id' => 333],
    ]);
}
else {
    $handler->handleRequest($_POST);
}

请记住,我根本没有测试过这段代码。运行它,看看会发生什么。