我正在尝试在我的 FOR 循环中创建一个查询,该查询将更新我的产品数量列。当客户结账时,他们会在我的订单表中创建一行,然后在订单详细信息中为购买的每件商品创建一行。
我有三个包含以下列的表
- 产品(编号、数量)
- orderdetails (ID, OrderID, ProductID, Quantity) "OrderID 和 ProductID 是外键"
- 订单(编号)
我收到的错误是
Fatal error: Uncaught Error: Call to a member function execute() on boolean
$newOrder = $conn->prepare("INSERT INTO orders (UserID, Amount) Values ('{$_SESSION['u_id']}','{$_SESSION['$s']}')");
$newOrder->execute();
$ordersid = $newOrder->insert_id;
//Save order details for new order
$cart = json_decode(json_encode($_SESSION['cart']));
//For loop with query that creates a new row for every item
for($i = 0; $i<count($cart); $i++){
$new_Orderdetail = $conn->prepare("INSERT INTO `orderdetails` (`OrderID`,`ProductID`,`Price`,`Quantity`) VALUES(".$ordersid.",".$cart[$i]->id.",".$cart[$i]->price.",".$cart[$i]->quantity.")");
$new_Orderdetail->execute();
$new_Orderdetailid = $new_Orderdetail->insert_id;
echo "$new_Orderdetailid </br>";
$update = $conn->prepare("Update p SET Quantity = Quantity - ".$cart[$i]->quantity." FROM products p where ID = ".$cart[$i]->id"");
$update->execute();
}
有人可以帮我解决我收到此错误的原因吗?
最佳答案
据我所知,表 products
中的字段 Quantity
是 VARCHAR()
类型,因此您必须使用 ''
添加值。
编辑:由于您现在希望该字段的类型为 INT
,因此不再需要 ''
。我已经更新了代码:
// Corrected code
$update = $conn->prepare("UPDATE products SET Quantity=".$cart[$i]->quantity." WHERE ID=".$cart[$i]->id);
并且您在同一条语句的末尾有两个没有点的 ""
,顺便说一下,如果 ,则此处不需要
是""
$cart[$i]->id数字
:
// Sample from your code
FROM products p where ID = ".$cart[$i]->id"");
// Corrected to
FROM products p where ID=".$cart[$i]->id);
关于php - OOP For循环SQL更新查询数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47851699/