【问题标题】:Looking for solution to insert PHP array to SQL database by using PDO寻找使用 PDO 将 PHP 数组插入 SQL 数据库的解决方案
【发布时间】:2016-07-01 17:27:45
【问题描述】:

这是我的订单详情数组,数组结构将是:“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,?,?)" ;

我应该如何继续?

【问题讨论】:

标签: php sql arrays loops pdo


【解决方案1】:

您可以使用 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();
}

【讨论】:

  • 我知道这是什么被否决了,这对我来说似乎是合理的。
  • @bassxzero 你需要更多的经验,才能从 mysqli 中分辨出 PDO。甚至来自 mysqli 的 mysqli 无论如何都行不通。
  • 哦,对不起,那是 mysqli 版本,然后我会编辑
  • 此代码将导致错误。您使用尚未声明的变量。 $quantity,$itemID
【解决方案2】:

很遗憾,您没有提供您的 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);
}

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 2021-09-04
  • 2012-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多