1

セッション配列をmysql行に入れるにはどうすればよいですか?

使用時のセッション配列出力print_r($_SESSION['producten']):

Array
(
    [producten] => Array
        (

            [0] => Array
                (
                    [product_id] => 3
                    [aantal] => 2
                )

            [1] => Array
                (
                    [product_id] => 2
                    [aantal] => 1
                )

        )
)

Mysql:

$order_ins = "INSERT INTO orders_products (order_id,product_id,product_amount) VALUES
('".$_SESSION['order_id']."', '".$_SESSION['product_id']."','".$_SESSION['aantal']."' )";

mysql_query($order_ins) or die("Ehh..error!?" . mysql_error());

私が望むのは、「product_id」と「aantal」(オランダ語で金額を意味する)がmysql行に挿入されることです。その後、「order_id」を使用して製品と金額をフィルタリングできます

4

4 に答える 4

1

PDO とパラメーター化されたステートメントを使用すると、はるかに簡単になります。SQL インジェクションのリスクも、紛らわしい文字列連結も、引用符文字を正しくエスケープしたかどうかの心配もありません。

<?php

$sql = "INSERT INTO orders_products (order_id, product_id, product_amount)
        VALUES (:order_id, :product_id, :product_amount)";
$stmt = $pdo->prepare($sql);
$data = array("order_id" => $_SESSION["order_id"]);
foreach ((array) $_SESSION["producten"] as $order) {
    $data["product_id"]     = $order["product_id"];
    $data["product_amount"] = $order["aantal"];
    $stmt->execute($data);
}
于 2012-10-29T19:30:26.290 に答える
0

これは機能するはずですが、SQL インジェクションのリスクに注意してください。

$sql = "INSERT INTO orders_products (order_id, product_id, product_amount) VALUES ";

$i = 1;

foreach($_SESSION[producten] as $innerArray) {
    $sql .= '(' . $_SESSION[order_id] . ', ' . $innerArray[product_id] . ', ' . $innerArray[aantal] . ')';

    if($i < count($_SESSION[producten])) $sql .= ', ';

    $i++;
}

mysql_query($sql) or die("Ehh..error!?" . mysql_error());

結果

の値は次の$sqlようになります。

orders_products (order_id、product_id、product_amount) に INSERT INSERT 値 (#、3、2)、(#、2、1)
于 2012-10-29T19:15:01.410 に答える
0

最初に配列をシリアル化すると、配列を格納できます。そうすれば、保存できる文字列になります。

検索と統計のために、カート内の各製品をテーブル内の個別の行に保存することは理にかなっています。ただし、テーブル内の一意の id 列を選択するように注意してください (ある場合)。たとえば、カートに同じ商品を 2 回入れることができますか (同じ T シャツ、赤と緑で 1 つずつ)。

于 2012-10-29T19:15:34.543 に答える