INSERT数组多维到数据库中

问题描述 投票:0回答:2

我是PHP的新手,对不起我的英语。我在这个论坛上已经阅读了关于这个主题的所有问题,但我仍然无法找到我的PHP的解决方案。我这里有2个会话,第一个是保存数据的人,第二个是保存购物车。这是我的会话结构

<?php
$id_pers person = $_SESSION['person'] ; //its contain just id


//for second $_SESSION['cart'] structure when i print_r is like this
Array (
[0] => Array (
   [item_id] => 4
   [item_name] => Notebook
   [item_qty] => 1
   [price] => 750
 )
[1] => Array (
   [item_id] => 5
   [item_name] => Keyboard
   [item_qty] => 1
   [price] => 70
 )
[2] => Array (
   [item_id] => 6
   [item_name] => Mouse
   [item_qty] => 1
   [price] => 50
 )
)
?>

问题是当我将数组保存到数据库中时,只保存一个数组,另一个数组不能保存到数据库中。这里我的插入功能是我从观看视频教程中写的:

<?php
function save($array, $connect){
  if(is_array($array)){
     $id_person = $_SESSION['person'];
     foreach($array as $row => $value) {
         $item_id = mysqli_real_escape_string($connect, $value['item_id'];
         $item_qty = mysqli_real_escape_string($connect, $value['item_qty'];
         $sql = "INSERT INTO tbl_order(id_person,item_id,qty) VALUES ('".$id_person."','".$item_id."','".$item_qty."')";
         mysqli_query ($connect, $sql);
     }
   }
 }
save($_SESSION['cart'], $ connect);
?>

请告诉我我的脚本在将数据数组插入表中的错误在哪里。谢谢 :)

php session multidimensional-array
2个回答
0
投票

语法错误

  $item_id = mysqli_real_escape_string($connect, $value['item_id'];
  $item_qty = mysqli_real_escape_string($connect, $value['item_qty];

缺少') 2x

 $item_id = mysqli_real_escape_string($connect, $value['item_id']);
 $item_qty = mysqli_real_escape_string($connect, $value['item_qty']);

并改变这一点(这是好的,不是最好的方法):

function save($array, $connect){
    if(is_array($array)){

 function save(array $array, $connect){

现在,如果您传入其他内容,那么数组PHP会发出错误。它被称为类型提示,它允许我们摆脱该检查,因为我们保证只有数组可以作为该参数传递。通过手动检查,您的代码将无声地失败,您不会知道原因。

我可能会在那里扔一个if(!session_id()) session_start();以保证安全。如果没有会话ID,则创建会话。除非已启动,否则无法将数据存储到会话中。

像这样:

<?php
function save(array $array, $connect){

     if(!session_id()) session_start();

     //don't trust this who knows where it came from, QQ'n not me.
     $id_person = mysqli_real_escape_string($connect, $_SESSION['person']);
     foreach($array as $row => $value) {
         $item_id = mysqli_real_escape_string($connect, $value['item_id']);
         $item_qty = mysqli_real_escape_string($connect, $value['item_qty']);
         $sql = "INSERT INTO tbl_order(id_person,item_id,qty) VALUES ('".$id_person."','".$item_id."','".$item_qty."')";
         mysqli_query ($connect, $sql);
     }
 }

save($_SESSION['cart'], $ connect);
?>

-NOTE-它也是首选准备查询而不是转义它们。

干杯。


0
投票

假设这些数字是整数而不是字符串,那么代码看起来应该更像:

<?php
session_start(); // before headers are sent
function saveCart($connect){
  if(!(isset($_SESSION['person'], $_SESSION['cart']) && is_int($_SESSION['person']) && is_array($_SESSION['cart']))){ // remember $_SESSION is a super global
    return false;
  }
  $id = $_SESSION['person']; $cartArray = $_SESSION['cart'];
  foreach($cartArray as $a){
     $stmt = $connect->prepare('INSERT INTO tbl_order (id_person, item_id, qty) VALUES (?, ?, ?)');
     $stmt->bind_param('iii', $id, $a['item_id'], $a['item_qty']); $stmt->execute();
  }
  return true;
}
if(saveCart($connect) === true){
  echo 'Cart Saved';
}
else{
  echo 'Cart was not Saved';
}
?>

准备好的陈述是要走的路。

© www.soinside.com 2019 - 2024. All rights reserved.