如何在一个php页面中执行多个sql insert语句

劳·彼得斯

使用 php 和 mysql .. 我想执行两个 sql 语句......第一个在purchaseorders表中创建采购订单(PO)......第二个使用该采购订单ID创建多个插入到'podetails ' 表以捕获包含在该采购订单中的项目。我无法执行多个 sql 语句来执行此操作。我可能完全错误地处理这个问题......所以我会很感激我能得到的任何帮助。

如果我只有代码的第一部分来创建 PO 记录 - 有效......但是当我添加第二部分以在 podetails 表中插入每条记录时 - 没有任何效果。它不再在“purchaseorders”表中创建采购订单记录。

<?php
    // establish DB connection (this includes creates $conn variable)
    include_once 'dbh.inc.php';

    session_start();
    $userId = $_SESSION['u_Id'];
    $supplierId = $_POST['supplierId'];
    $order_items = $_POST['orderitems'];

    // create PO record
    $sql = "INSERT INTO purchaseorders (PODate, supplierId, userId) 
    VALUES (?,?,?);";
    $stmt = mysqli_stmt_init($conn);
    if (!mysqli_stmt_prepare($stmt, $sql)) {
        header("Location: ../place.php?error=sqlerror");
        echo "SQl Connect error!";
    }
    else {
        $date = date('Y-m-d H:i:s');
        mysqli_stmt_bind_param($stmt, "sss", $date, $supplierId, 
        $userId);
        mysqli_stmt_execute($stmt);        
    }

    // // get last PO record id
    $POId = mysqli_insert_id($conn); 

    // for each record in grid - create PO details record
    foreach ($order_items as $item) {
        $sql1 = "INSERT INTO podetails (PONumber, productId, poquantity, 
                 pocostPrice, delivered, paidStatus) VALUES 
                 (?,?,?,?,?,?);";
        $stmt1 = mysqli_stmt_init($conn);
        if (!mysqli_stmt_prepare($stmt1, $sql1)) {
            echo "SQl Connect error!";
        }
        else {
            mysqli_stmt_bind_param($stmt1, "ssssss", $POId, 
                 $item['prodId'], $item['qty'], $item['costPrice'], 
                 "false", "false");
            mysqli_stmt_execute($stmt1);
            echo "PO Placed: PO Number = ".$POId;
        } 
    }                        
?>

我希望输出是 PO 编号(在创建所有 podetail 项目记录之后),但此代码不会创建任何记录。

ryantxr

您的代码接近正确。我稍微调整了一下。

// establish DB connection (this includes creates $conn variable)

$conn = mysqli_connect("127.0.0.1", "app", "aaaa", "sss");
if ( ! $conn ) {
    throw new Exception('Connection failed');
}

$userId = 123;
$supplierId = 200;
$order_items = [
    ['prodId' => 2000, 'qty' => 5, 'costPrice' => 1.25],
    ['prodId' => 2001, 'qty' => 7, 'costPrice' => 2.25],
    ['prodId' => 2002, 'qty' => 9, 'costPrice' => 1.20],
    ['prodId' => 2003, 'qty' => 15, 'costPrice' => 3.25],
    ['prodId' => 2004, 'qty' => 25, 'costPrice' => 5.22],
    ['prodId' => 2005, 'qty' => 35, 'costPrice' => 5.25],
    ['prodId' => 2006, 'qty' => 45, 'costPrice' => 11.51],
];

// create PO record
$sql = "INSERT INTO purchaseorders (PODate, supplierId, userId) VALUES (?,?,?);";
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sql)) {
    // header("Location: ../place.php?error=sqlerror");
    throw new Exception("SQL error! " . mysqli_error($conn));
}
else {
    $date = date('Y-m-d H:i:s');
    mysqli_stmt_bind_param($stmt, "sss", $date, $supplierId, $userId);
    mysqli_stmt_execute($stmt);        
}

// // get last PO record id
$POId = mysqli_insert_id($conn); 
echo "POId = " . print_r($POId, true) . "\n";

$sql1 = "INSERT INTO podetails (PONumber, productId, poquantity, 
            pocostPrice, delivered, paidStatus) VALUES 
            (?,?,?,?,?,?);";
$stmt1 = mysqli_stmt_init($conn);
if (!$stmt1) {
    throw new Exception("SQl Connect error! " . mysqli_error($conn));
}

if (!mysqli_stmt_prepare($stmt1, $sql1)) {
    throw new Exception("SQl Connect error! " . mysqli_error($conn));
}
// for each record in grid - create PO details record
foreach ($order_items as $item) {
    $delivered = "false";
    $paidStatus = "false";
    if ( ! mysqli_stmt_bind_param($stmt1, "ssssss", $POId, 
    $item['prodId'], $item['qty'], $item['costPrice'], $delivered, $paidStatus) ) {
        throw new Exception("SQl error! " . mysqli_error($conn));
    }
    if( ! mysqli_stmt_execute($stmt1) ) {
        throw new Exception("SQl error! " . mysqli_error($conn));
    }
}                        

echo "PO Placed: PO Number = ".$POId . "\n";

我制作了这些表以在本地运行它。

CREATE TABLE `purchaseorders` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `PODate` date DEFAULT NULL,
  `supplierId` int(10) unsigned DEFAULT NULL,
  `userId` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

CREATE TABLE `podetails` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
    `PONumber` int(10) unsigned DEFAULT NULL,
    `productId` int(10) unsigned DEFAULT NULL,
    `poquantity` int(11) DEFAULT NULL,
    `pocostPrice` decimal(9,2) DEFAULT NULL,
    `delivered` varchar(20) NOT NULL DEFAULT 'false',
    `paidStatus` varchar(20) NOT NULL DEFAULT 'false',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

一个查询中的多个 INSERT INTO 语句

来自分类Dev

如何在iOS的sqlite中的一个查询中执行多个select语句?

来自分类Dev

Qt Sql INSERT语句无效

来自分类Dev

Python中的动态INSERT语句

来自分类Dev

C中的mysql INSERT语句

来自分类Dev

C中的mysql INSERT语句

来自分类Dev

如何在一个宏中合并多个SQL更新语句?

来自分类Dev

SQL Server:如何在insert语句中使用if语句

来自分类Dev

如何从一个 INSERT 语句插入 2 行?

来自分类Dev

在Laravel中创建一个Insert ... Select语句

来自分类Dev

在INSERT语句中执行SELECT语句的SQL是什么?

来自分类Dev

如何执行 SELECT 语句中的 INSERT?

来自分类Dev

sqlite android中的多个insert语句

来自分类Dev

在PostgreSQL中的一个insert into语句中添加两个select语句

来自分类Dev

在一个mysql查询中执行多个语句

来自分类Dev

SQLITE UPDATE或INSERT语句不想执行

来自分类Dev

在执行INSERT INTO时如何在SELECT语句期间创建数据?

来自分类Dev

使用带有变量的 SELECT 语句的 SQL INSERT INTO VALUE 语句

来自分类Dev

使用序列的LOOP中的IF语句中的UPDATE / INSERT语句

来自分类Dev

使用cqlsh执行insert语句时出现“无法完成请求:一个或多个节点不可用”

来自分类Dev

使SQL INSERT语句更易于阅读

来自分类Dev

使用Insert和Case的Sql语句

来自分类Dev

带有嵌套选择的sql insert语句

来自分类Dev

INSERT INTO语句以匹配行-MS Access SQL

来自分类Dev

Microsoft Access VBA INSERT SQL 语句

来自分类Dev

较大的MySQL INSERT语句导致PHP错误

来自分类Dev

一对多关系的INSERT语句

来自分类Dev

INSERT INTO语句的一些问题

来自分类Dev

在R中的sqldf中使用INSERT语句

Related 相关文章

热门标签

归档