将多维数组插入数据库

时间:2019-02-21 02:09:00

标签: php session multidimensional-array

我是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);
?>

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

2 个答案:

答案 0 :(得分: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);
?>

-注意-也最好准备查询而不是转义查询。

干杯。

答案 1 :(得分: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';
}
?>

准备好的语句是解决方法。