【问题标题】:PhP How to send a Session Array to MySQL table?PhP 如何将会话数组发送到 MySQL 表?
【发布时间】:2019-06-21 16:35:11
【问题描述】:

我仍然是学习 MySQL 工作原理和 PhP 的新手,我一直在尝试将我的 Array 值作为会话的一部分输入 MySQL 数据库,但我不知道如何或我做错了什么。我无法让查询从函数 checkouttodatabase() 中的数组中获取某些值。

我尝试了多个关于将会话数组发布到 MySQL 数据库中的教程和帖子,但无济于事。这似乎是“功能”,但不会将项目名称添加到数据库中,而是放下“数组”和值“0”

//将项目添加到数组中

if (isset($_POST["add_to_cart"])) {

if (isset($_SESSION["shopping_cart"])) {
    $item_array_id = array_column($_SESSION["shopping_cart"], "item_id");
    if (!in_array($_GET["id"], $item_array_id)) {
        $count = count($_SESSION["shopping_cart"]);
        $item_array = array(

            'item_id' => $_GET["id"],
            'item_name' => $_POST["hidden_name"],
            'item_price' => $_POST["hidden_price"],
            'item_quantity' => $_POST["quantity"]
        );
        array_push($_SESSION['shopping_cart'], $item_array);
    } else {


        echo '<script>alert("Item Already Added")</script>';
        echo '<script>window.location="shoppingcart.php"</script>';
    }
} else {
    $item_array = array(

        'item_id' => $_GET["id"],
        'item_name' => $_POST["hidden_name"],
        'item_price' => $_POST["hidden_price"],
        'item_quantity' => $_POST["quantity"]
    );
    $_SESSION["shopping_cart"][0] = $item_array;
}
}

//获取数组值并添加到数据库的函数

function checkouttodatabase() {

$connect = mysqli_connect("localhost", "root", "", "precisionmice");
mysqli_select_db($connect, 'precisionmice');


foreach($_SESSION['shopping_cart'] as $row => $id){

    $sql="INSERT INTO orders (product, quantity, totalprice)
          VALUES ('item_id','item_quantity','item_price')";
}

    if(mysqli_query($connect, $sql)){
        echo "Betaling bevestigen";
        header("refresh:2; url=checkout.php");
    } else {
        echo "Update mislukt";
    }
}

当播放器被重定向到一个单独的网页时,函数 checkouttodatabase() 被调用。现在我想要的结果是让我们说有两个项目添加到购物车数组中。对于添加的每个项目,我希望它将变量发送到 MYSQL 数据库。除了我也在为总价而奋斗。我想这样做,以便将数量乘以添加到 MYSQL 列 total_price 中的单个 item_price。

例如: 提交时的数据库结果:

Item_id:产品名称 1,Item_quantity:3,Total_price:45.00$

Item_id:产品名称 2,Item_quantity:1,Total_price:15.00$

【问题讨论】:

  • 您将像 'item_id' 这样的静态值作为字符串插入。而是将其定义为 ?,?,? 并使用 bind_param 设置值。
  • 为什么每次都建立相同的字符串$sql,而只插入最后一次出现到数据库中?为什么不在该查询中使用变量?

标签: php mysql


【解决方案1】:

在这个代码示例中有几件事要讨论,但为了解决将数组放入数据库的问题,@tadman 在上面的评论中为您提供了答案。编写 SQL 语句时,不能将数组视为字符串;您需要改为使用数组的各个元素。

如果您真的想将整个数组保存到 MySQL 数据库表的单个字段中,则必须以某种方式对数组进行序列化,例如,使用 json_encode()。但您通常不应在没有令人信服的理由的情况下将多个值填充到单个数据库列中。

【讨论】:

  • 我已经关注@tadman 链接的页面,但现在我收到此错误:警告:MYSQLI_STMT_BIND_PARAM() 期望参数 1 为 MYSQLI_STMT,布尔值在 D:\XAMPP\HTDOCS\PRECISIONMICE\STORE\ SHOPCARFUNCTIONS.PHP 在第 107 行。警告:MYSQLI_STMT_EXECUTE() 期望参数 1 是 MYSQLI_STMT,布尔值在 D:\XAMPP\HTDOCS\PRECISIONMICE\STORE\SHOPCARTFUNCTIONS.PHP 上第 108 行。这是“mysqli_stmt_bind_param($stmt, $itemname, $itemprice, $itemquantity); mysqli_stmt_execute($stmt); "对不起,如果我做错了,我发现 MySQL 和 PhP 很难工作。
  • 我现在的代码:`function checkouttodatabase() { $connect = mysqli_connect("localhost", "root", "", "precisionmice"); mysqli_select_db($connect, 'precisionmice'); foreach($_SESSION['shopping_cart'] as $row => $id){ $itemname = "item_name"; $itemprice = "item_price"; $itemquantity = "item_quantity"; $stmt = mysqli_prepare($connect, "INSERT INTO orders VALUES (?, ?, ?)"); mysqli_stmt_bind_param($stmt, $itemname, $itemprice, $itemquantity); mysqli_stmt_execute($stmt); } }`
猜你喜欢
  • 2014-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2012-06-21
  • 2021-12-01
  • 2014-11-26
  • 1970-01-01
相关资源
最近更新 更多