如何将会话数组放入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”
过滤产品和金额答案 0 :(得分:1)
可以将会话信息存储在数据库中。我写了一个这样做的课。
见这里:
我在PDO周围使用一个小包装器:
它非常易于使用:
而不是:
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恤,一个是红色,一个是绿色)。