0

2つの配列のループを作成しようとしていますが、競合が発生し、重複するエントリが作成されます...ループを間違って作成しているだけだと思います。

        foreach($productIds as $productID){

            foreach($qty as $q) {
$sql = "INSERT INTO orderedProducts (productID, orderID, qty) VALUES 
((select productID from products where productID ='$productID'), '$orderID', '$q')";
           execute_query($sql);

                 }
           }

数量ループを削除し、数量をハードコードするだけで正常に機能します。2つのループを組み合わせる何らかの方法はありますか?

4

2 に答える 2

1

INSERT INTO...SELECTこれに関するステートメントを使用して、

INSERT INTO orderedProducts (productID, orderID, qty) 
SELECT productID, '$orderID', '$q'
FROM   products
WHERE  productID = '$productID'

SQL Injection補足として、変数の値(s)が外部からのものである場合、クエリは脆弱です。それを防ぐ方法については、以下の記事をご覧ください。を使用PreparedStatementsすると、値を一重引用符で囲む必要がなくなります。

于 2013-03-25T07:10:30.930 に答える
0

問題を理解しました...混乱しているforeachループを使用できません。配列のインデックスを使用しました。

    for($i =0 ; $i < sizeof($productIds);$i++){ 
$sql = "INSERT INTO orderedProducts (productID, orderID, qty) VALUES ((select productID from products where productID ='$productIds[$i]'), '$orderID', '$qty[$i]')";
        execute_query($sql);
       }
于 2013-03-25T08:19:53.327 に答える