我如何在mysql中放入一个数组?

时间:2012-10-29 19:03:23

标签: php mysql arrays session

如何将会话数组放入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 个答案:

答案 0 :(得分:1)

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

见这里:

sessionwrapper.php

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

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

答案 1 :(得分: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);
}

答案 2 :(得分: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的值为:

INSERT INTO orders_products (order_id, product_id, product_amount) VALUES (#, 3, 2), (#, 2, 1)

答案 3 :(得分:0)

如果先将序列化数组,则可以存储该数组。这样你就可以保存一个字符串。

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