php - OOP For循环SQL更新查询数量

标签 php mysql oop

我正在尝试在我的 FOR 循环中创建一个查询,该查询将更新我的产品数量列。当客户结账时,他们会在我的订单表中创建一行,然后在订单详细信息中为购买的每件商品创建一行。

我有三个包含以下列的表

  1. 产品(编号、数量)
  2. orderdetails (ID, OrderID, ProductID, Quantity) "OrderID 和 ProductID 是外键"
  3. 订单(编号)

我收到的错误是

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 中的字段 QuantityVARCHAR() 类型,因此您必须使用 '' 添加值。

编辑:由于您现在希望该字段的类型为 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/

相关文章:

PHP 5.4 开发服务器无法识别 mysql_connect()

php - 获取 WordPress 设置电子邮件

php - 在为画廊存储图像时,最佳做法是什么?

php - 将子类的值附加到父类

非 OOP 程序员的 PHP 框架

php - 如何连接到另一个域上的 MySQL 数据库?

php - xdebug 扩展未加载

php - 包含带有不存在的链接 rel 的 .css 页面是否有任何错误消息或处罚?

php - 查找与多列搜索查询匹配的列名

oop - 构造函数的使用 - 奇怪的疑问