【问题标题】:OOP For Loop SQL Update Query QuantityOOP For Loop SQL 更新查询数量
【发布时间】:2017-12-17 02:25:57
【问题描述】:

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

我有三个包含以下列的表格

  1. 产品(ID、数量)
  2. orderdetails(ID、OrderID、ProductID、Quantity)“OrderID 和 ProductID 是外键”
  3. 订单 (ID)

我收到的错误是

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

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

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

【问题讨论】:

    标签: php mysql oop


    【解决方案1】:

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

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

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

    你有两个"",在同一语句的末尾没有一个点,顺便说一句,如果$cart[$i]-&gt;idnumeric,这里不需要""

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

    【讨论】:

    • 感谢您的帮助和知识,这解决了我的错误消息,但现在我的查询从指定的产品表行中删除了所有数量。感觉很伤心的人
    • 嗯.. 你能仔细检查一下products 表中的Quantity 列是VARCHAR 而不是INT 吗?
    • 也许这是一个错字,应该是int。试试这个:$update = $conn-&gt;prepare("UPDATE products SET Quantity=".$cart[$i]-&gt;quantity." WHERE ID=".$cart[$i]-&gt;id);
    • 它实际上是一个 INT 我应该将其更改为 VARCHAR 吗?
    • 如果您希望在列中输出例如 Quantity - 5,那么您应该更改为 VARCHAR 但如果只是一个数字是好的,则将其保留在 INT,我将编辑我的答案。跨度>
    猜你喜欢
    • 1970-01-01
    • 2021-05-18
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    相关资源
    最近更新 更多