StackOverflow 社区您好,
我目前正在构建一个在线购物应用程序,并且遇到了实施挑战。我设计了一种名为
addToCart
的方法,它允许用户将商品添加到购物车中。它使用 PHP 中的预准备语句与 MySQL 数据库交互。
这是我得到的:
public function addToCart($userId, $productId, $quantity){
$status = "Offen";
$stmt = $this->db->getConnection()->prepare("SELECT * FROM carts WHERE user_id = ? AND status = ?");
$stmt->bind_param("is", $userId, $status);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();
if ($row) {
// Wenn der Benutzer bereits einen aktiven Warenkorb hat, verwenden der CartID
$cartId = $row['cart_id'];
// Überprüfen, ob das Produkt bereits im Warenkorb ist
$stmt = $this->db->getConnection()->prepare("SELECT quantity FROM cartproducts WHERE cart_id = ? AND product_id = ?");
$stmt->bind_param("ii", $cartId, $productId);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();
if ($row) {
// Wenn das Produkt bereits im Warenkorb ist, aktualisieren der Menge
$newQuantity = $row['quantity'] + $quantity;
$stmt = $this->db->getConnection()->prepare("UPDATE cartproducts SET quantity = ? WHERE cart_id = ? AND product_id = ?");
$stmt->bind_param("iii", $newQuantity, $cartId, $productId);
return $stmt->execute();
} else {
// Wenn das Produkt nicht im Warenkorb ist, füge hinzu
$stmt = $this->db->getConnection()->prepare("INSERT INTO cartproducts (cart_id, product_id, quantity) VALUES (?, ?, ?)");
$stmt->bind_param("iii", $cartId, $productId, $quantity);
return $stmt->execute();
}
}
}
}
该功能似乎在大多数情况下都可以工作,但我想知道:
我真的很感激任何建议或优化技巧。预先感谢!
我已经尝试了 addToCart 函数的当前实现,并期望它能够有效地处理将商品添加到用户的购物车,同时最大限度地减少数据库调用。我希望该函数首先检查用户的购物车是否已存在,然后根据产品是否已在购物车中,更新数量或为产品添加新条目。我不确定这是否是实现此目标的最佳方法,特别是在数据库性能方面。这就是为什么我正在寻求有关潜在改进或陷阱的反馈。
我的朋友,使用 PDO 而不是 Mysqli :)