Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在mysql中放置数组?_Php_Mysql_Arrays_Session - Fatal编程技术网

Php 如何在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

如何将会话数组放入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($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创建sql
foreach($\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);
}