簡體   English   中英

PHP for循環插入SQL

[英]PHP for loop Insert SQL

您能解釋一下為什么這段代碼沒有將int插入數據庫嗎?

    //INSERT VALUES IN ORDERS
    $sqlInsert = "";
        for($i = 0; $i < count($_SESSION['cart']); $i++)
        {
            $resSelect = mysqli_fetch_assoc($sqlContent);

            $prodID = $resSelect['ProdID'];
            $price = $resSelect['Price'];
            $quantity = $_SESSION['cart'][$resSelect['ProdID']];
            $sum = ($_SESSION['cart'][$resSelect['ProdID']] * 
            $resSelect['Price']);
            $sqlInsert .= "INSERT into Order (ProdID, 
            Quantity, Price,  Sum, OrderID) 
            VALUES ($prodID, $quantity, $price, $sum, $userID);";

        }
        mysqli_query($dbLink, $sqlInsert);

那是var_dump($sqlInsert)的輸出:

       INSERT INTO Order (ProdID, quantity, 
       Price, Sum, OrderID) VALUES (1, 4, 200, 800, 10);
       INSERT INTO Order (ProdID, quantity, 
       Price, Sum, OrderID) VALUES (7, 3, 200, 600, 10);
       INSERT INTO Order (ProdID, quantity, 
       Price, Sum, OrderID) VALUES (9, 3, 200, 600, 10);

這在數據庫中有效。 並且var_dump(mysqli_query($dbLink, $sqlInsert))的輸出始終為false。

提前謝謝了

如上述其他注釋所述,您應始終檢查mysqli_query()返回的錯誤。 參見示例代碼: http : //php.net/manual/en/mysqli.error.php

mysqli_query()函數不支持執行多個語句。

建議使用mysqli_multi_query() 使用它幾乎沒有好處,並且它引入了新的潛在SQL注入漏洞(例如著名的Little Bobby Tables卡通 )。 我與MySQL的前工程總監交談,他說(措辭):“沒有理由存在多重查詢,它只會造成危害。”

您應該一次執行一次INSERT語句。 沒有理由將多個語句附加在一起。

如果您擔心多個語句的性能開銷,則可以將多個行附加到單個INSERT語句中。 或者,您可以在事務中包裝一系列單獨的INSERT語句。

您可能想閱讀我的演示文稿快速加載數據! 在這里,我比較了插入多行數據的各種策略的性能。

這正是准備好的語句的用途:

// Note that ORDER is a MySQL reserved keyword and needs special escaping
$stmt = $dbLink->prepare("INSERT into `Order` (ProdID, 
        Quantity, Price, Sum, OrderID) VALUES (?,?,?,?,?)");
$stmt->bind_param('iiddi', $ProdID, $Quantity, $Price, $Sum, $OrderID);

for($i = 0; $i < count($_SESSION['cart']); $i++)
{
    $resSelect = $sqlContent->fetch_assoc();

    $ProdID = $resSelect['ProdID'];
    $Quantity = $_SESSION['cart'][$resSelect['ProdID']];
    $Price = $resSelect['Price'];
    $Sum = $_SESSION['cart'][$resSelect['ProdID']] * $resSelect['Price'];
    $OrderID =  $userID;

    $stmt->execute();
}

該原始代碼中存在大量令人震驚的錯誤,這些錯誤將使它根本無法起作用,因此您將來需要更加小心,並更加有條理地尋求解決方案。 逐步建立並進行測試,以確保您不會對尚未完全理解的解決方案過於深入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM