OOP For循环SQL更新查询数量

时间:2017-12-17 02:25:58

标签: php mysql oop

我正在尝试在我的FOR LOOP中创建一个查询,该查询将更新我的产品数量列。当客户签出时,他们会在我的订单表中创建一行,从那里为每个购买的商品创建一行订单。

我有三个包含以下列的表

  1. 产品(ID,数量)
  2. orderdetails(ID,OrderID,ProductID,Quantity)“OrderID和ProductID是外键”
  3. 订单(ID)
  4. 我收到的错误是

      

    致命错误:未捕获错误:调用成员函数execute()   布尔

    $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();
    }
    

    有人可以帮我解决一下我收到此错误的原因吗?

1 个答案:

答案 0 :(得分:1)

据我所知,表Quantity中的字段products属于VARCHAR()类型,因此您必须使用''来添加值。

编辑:由于您现在希望该字段属于INT类型,因此不再需要''。我更新了代码:

// Corrected code
$update = $conn->prepare("UPDATE products SET Quantity=".$cart[$i]->quantity." WHERE ID=".$cart[$i]->id);

您在同一个语句的末尾有两个""没有点,如果""$cart[$i]->id,则此处不需要numeric

// Sample from your code
FROM products p where ID = ".$cart[$i]->id"");

// Corrected to
FROM products p where ID=".$cart[$i]->id);