【问题标题】:serializing and unserializing session array序列化和反序列化会话数组
【发布时间】:2015-03-31 08:04:01
【问题描述】:

这是我将采购订单表格保存到数据库的代码..

function save(&$purchase_data,$purchase_id)
    {
        $success=false;

        //Run these queries as a transaction, we want to make sure we do all or nothing
        $this->db->trans_start();

        if($purchase_data)
        {
            if (!$purchase_id or !$this->exists($purchase_id))
            {  
                //$purchase_data['purchase_id'] = $purchase_id = $purchase_data['purchase_id'];
                $success = $this->db->insert('purchase_order',$purchase_data);
                $post_array['cart']=$this->session->userdata('data');
                /*print_r($post_array);
                exit;*/
                $purchase_id=$this->db->insert_id();
                $i=0;
    foreach($post_array['cart'] as $item)
    {
        //echo "<pre>"; print_r($item); echo "</pre>";
        $query = $this->db->query("SELECT name FROM phppos_items WHERE item_id='".$item['product_id']."'");
        foreach ($query->result() as $row)
{
    $product_name=$row->name;

}
        $product_id=$item['product_id'];
        $quantity=$item['quantity'];
        $unit=$item['unit'];
        $unit_rate=$item['unit_rate'];
        $query = $this->db->query("insert into phppos_productdetails(product_id,product_name,quantity,unit,unit_rate,purchase_id) values ('$product_id','$product_name','$quantity','$unit','$unit_rate','$purchase_id')");

        $i++;
    }
            }
}

现在这段代码在 productdetails 表中插入多行,但我想序列化 $post_array['cart'] 数组并希望将整个数组存储在一列中。那我该怎么做?? 现在我的数据正在保存,如下所示..

您可以看到 purchase_id 为 17 的三个产品。所以我想将所有 product_id、所有产品名称、所有 qty、unit、unit_rate 存储在一列中。简而言之,我只想向数据库插入一行。那么我应该对 foreach 循环进行哪些更改呢?

【问题讨论】:

    标签: php codeigniter serialization


    【解决方案1】:

    您可以使用 php 序列化函数序列化数组或对象,它会返回一个字符串,您可以将其保存在表中

    $val = serialize(array('test','test2',"test3",'test4'=>'1'));
    
    or 
    
    $val = serialize($post_array['cart']);
    

    当您从表中获取列时,您可以反序列化字符串,它将返回给您的数组

    print_r(unserialize($val));
    
    or 
    
    $cart = print_r($row->column_name);
    

    您可以像现在一样循环浏览购物车。

    【讨论】:

    • 是的,为purchase_id 创建一个包含所有项目的多维数组 17 序列化数组并保存在表中,它将是array('itme1'=>array(all info),'item2'=>array(所有信息),'item3'=>数组(所有信息));并序列化它
    【解决方案2】:

    这些函数(来自PHP Session helpers)可以帮助你:

    function decode_session($data){
      $temp = $_SESSION;
      session_decode($data);
      $out = $_SESSION;
      $_SESSION = $temp;
      return $out;
    }
    
    function encode_session($data){
      $temp = $_SESSION;
      $_SESSION = $data;
      $out = session_encode();
      $_SESSION = $temp;
      return $out;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-19
      • 2014-12-12
      • 2011-08-11
      • 1970-01-01
      • 2013-10-05
      • 1970-01-01
      相关资源
      最近更新 更多