使用准备好的语句增强 PHP 中的 $karl "addToCart" 函数

问题描述 投票:0回答:1

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

该功能似乎在大多数情况下都可以工作,但我想知道:

  1. 是否有更有效或更简洁的方法来构建此逻辑以最大程度地减少数据库调用次数?
  2. 这种方法是否存在我可能会忽略的潜在陷阱或边缘情况?

我真的很感激任何建议或优化技巧。预先感谢!

我已经尝试了 addToCart 函数的当前实现,并期望它能够有效地处理将商品添加到用户的购物车,同时最大限度地减少数据库调用。我希望该函数首先检查用户的购物车是否已存在,然后根据产品是否已在购物车中,更新数量或为产品添加新条目。我不确定这是否是实现此目标的最佳方法,特别是在数据库性能方面。这就是为什么我正在寻求有关潜在改进或陷阱的反馈。

php html css apache server
1个回答
0
投票

我的朋友,使用 PDO 而不是 Mysqli :)

  1. 统一指挥 文档说明:文档是一个程序的一个整体,是一个项目的一部分。 Zielgruppe:程序员、项目经理和技术支持人员。 Projektüberblick:Bei dieser Website handelt es sich um einen Webshop für eine fiktive Firma mit einer Admin Verwaltung.
  2. 系统 硬件配置:在 Speicherplatz 上的 PC 功能 软件操作:Web 服务器、PHP、MySQL 数据银行
  3. 设置 配置:在 der module/config.php 中,查看 Datenbankanmelde Informationen gepflegt
  4. 数据模型 数据银行架构:Tabellen
  5. 炸肉排 Drittanbieter-Integrationen:Kreditkarten Bezahlung API
  6. 代码贝斯皮勒 Hauptfunktionen: Methoden 屏幕截图 inlusive erklärung
  7. 维特伦特威隆 Zukünftige Verbesesserungen:
  • Um die Benutzererfahrung besser zu gestalten könnte man ein css Framework einbauen。
  • Mehr Sicherheits 功能(CSRF、SSL、服务器监控)
  • Mehrere Zahlungsmethoden
© www.soinside.com 2019 - 2024. All rights reserved.