Php 如何在mysql中放置数组?
如何将会话数组放入mysql行中 使用Php 如何在mysql中放置数组?,php,mysql,arrays,session,Php,Mysql,Arrays,Session,如何将会话数组放入mysql行中 使用打印时的会话数组输出($\u会话['producten']): Mysql: $order_ins = "INSERT INTO orders_products (order_id,product_id,product_amount) VALUES ('".$_SESSION['order_id']."', '".$_SESSION['product_id']."','".$_SESSION['aantal']."' )"; mysql_query($or
打印时的会话数组输出($\u会话['producten'])
:
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());
我想要的是在mysql行中插入“product_id”和“aantal”(荷兰语表示金额)。之后,可以使用“订单id”过滤产品和金额但是,请注意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());
如果先序列化数组,则可以存储该数组。这样,它将成为一个可以保存的字符串
对于搜索和统计,将每个产品存储在购物车中表中自己的行上是有意义的。但是要小心选择表中的唯一id列(如果有)。例如,购物车中可以有两次相同的产品(同一件t恤,一件红色,一件绿色)。可以将会话信息存储在数据库中。我写了一个这样的类 请看这里: 我在PDO周围使用了一个小包装: 它非常容易使用: 而不是:
session_start();
做:
表的DDL:
CREATE TABLE user_session (
session_id VARCHAR(64) PRIMARY KEY,
last_request_time INTEGER,
session_data TEXT
);
它会自动跟踪您提供的PDO数据库连接中的会话信息。你不需要做任何不同的事情。只需将$\u会话
变量设置为正常值
if (isset($_SESSION['user_id']))
{
echo "You are already logged in. <br />\n";
}
else
{
printLoginForm();
}
if(isset($\u会话['user\u id']))
{
echo“您已经登录。
\n”;
}
其他的
{
printloginfo();
}
使用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);
}
为每个字段指定自己的列。这就是数据库的工作原理。会话数据(可以在脚本之外编辑)+字符串连接SQL查询构建=SQL注入的风险。这是一个非常简单的问题。使用foreach创建sqlforeach($\u会话['producten']作为$product){
内部foreach
使用$product['order\u id']
,$product['product\u id']
和$product['aantal']
在您的查询中。感谢您的输入,非常有用!有任何删除SQL注入漏洞的提示吗?@jediah使用准备好的语句,如我的答案和比尔的语句。@jediah您可以使用mysqli\u prepare
。阅读mysqli\u
函数。谢谢,对未来的项目非常有用!将在脚本中为使用它。你有网站或电子邮件我可以放在信用卡上吗?@jediah我不想把我的电子邮件放在公共网站上。如果你愿意,你可以用我的名字。这不是一个很普通的名字。谢谢,非常有用。学习新方法总是很好的
CREATE TABLE user_session (
session_id VARCHAR(64) PRIMARY KEY,
last_request_time INTEGER,
session_data TEXT
);
if (isset($_SESSION['user_id']))
{
echo "You are already logged in. <br />\n";
}
else
{
printLoginForm();
}
<?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);
}