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

可以将会话信息存储在数据库中。我写了一个这样做的类。

看这里:

sessionwrapper.php

我在 PDO 周围使用了一个小包装器:

数据库助手.php

它非常易于使用:

代替:

session_start();

做:

require_once("sessionwrapper.php");

SessionWrapper::startGlobalSession();

表的 DDL:

CREATE TABLE user_session (
    session_id VARCHAR(64) PRIMARY KEY,
    last_request_time INTEGER,
    session_data TEXT
);

它会自动跟踪您提供的 PDO 数据库连接中的会话信息。你不需要做任何不同的事情。只需将您的$_SESSION变量设置为正常即可。

if (isset($_SESSION['user_id']))
{
    echo "You are already logged in. <br />\n";
}
else
{
    printLoginForm();
}
于 2012-10-29T19:20:36.003 回答
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) 值 (#, 3, 2), (#, 2, 1)
于 2012-10-29T19:15:01.410 回答
0

如果你先序列化它,你可以存储数组。这样,它将成为您可以保存的字符串。

对于搜索和统计,将购物车中的每个产品存储在表中自己的行中可能是有意义的。但要小心选择表中唯一的 id 列(如果有的话)。例如,购物车能否在购物车中有两次相同的产品(相同的 T 恤,一件红色,一件绿色)。

于 2012-10-29T19:15:34.543 回答