【发布时间】:2019-10-10 12:01:37
【问题描述】:
我有这个存储过程,它有 2 个参数,第一个是 cartId(它是 IN),我有 newOrderId(它是 OUT)。现在, 我知道 inCartId 是购物车 ID,它将来自表单或购物车被访问的任何方式,但我不明白 OUT newOrderId 因为这是 MySQL 将返回的。 现在,在调用这个存储过程的 PHP 中,它会是这样的。
$sql = 'CALL create_order(:cart_id, "What will be here")// The cart_id is what PHP will pass to MySQL, but what will be passed
to the 2nd argument since PHP does not know before hand what MySQL will return.
CREATE PROCEDURE create_order(
IN inCartId int,
OUT newOrderId int
)
BEGIN
-- Insert a new record into orders and obtain the new order ID
INSERT INTO orders (created_on) VALUES (NOW());
-- Obtain the new Order ID
SELECT LAST_INSERT_ID() INTO newOrderId;
-- Insert order details in order_detail table
INSERT INTO order_detail (
order_id, product_id, attributes, product_name, quantity, unit_cost
)
SELECT
orderId,
p.id,
sc.attributes,
p.name,
sc.quantity,
COALESCE( NULLIF( p.discounted_price, 0 ), p.price ) AS unit_cost
FROM
shopping_cart sc
INNER JOIN products p ON sc.product_id = p.id
WHERE
sc.cart_id = inCartId
AND
sc.buy_now;
-- Save the order's total amount
UPDATE
orders
SET
total_amount = (
SELECT
SUM( unit_cost * quantity )
FROM
order_detail
WHERE
order_id = orderId
)
WHERE
id = orderId;
-- Clear the shopping cart
CALL shopping_cart_empty(inCartId);
END```
【问题讨论】:
标签: php mysql stored-procedures