【问题标题】:How to fill session array with data from database?如何用数据库中的数据填充会话数组?
【发布时间】:2016-03-30 15:03:24
【问题描述】:

我知道这个问题对于有经验的人来说可能是非常基础的。但我仍在学习过程中,所以我需要一些帮助。

我想用来自数据库的数据填充会话数组。会话数组中可以有多个项目。我正在尝试这样做 -

$sql = mysqli_query($con, "SELECT * FROM `purchase_info_details` WHERE  `purchase_details_id` = '$pur_det_id'");

while ($row = mysqli_fetch_array($sql)) {

   $data[$i]['purchase_details_id'] = $row['purchase_details_id'];
   $data[$i]['cid'] = $row['id'];
   $data[$i]['item_id'] = $row['item_id'];
   $data[$i]['unit_id'] = $row['unit_id'];
   $data[$i]['quantity'] = $row['quantity'];
   $data[$i]['price'] = $row['price'];
   $data[$i]['conv_rate'] = $row['conv_rate'];

   $_SESSION['list1_data']['purchase_details_id'] = $data[$i];
 }

仅供参考:purchase_details_id 是主键。此代码部分工作。我的意思是我只从会话数组中的表中获取一行,但我需要从表中获取与我的 SQL 查询匹配的所有行。

我一直在互联网上搜索相关示例,但尚未找到。我真的被它困住了,找不到任何解决方案。请帮忙!

谢谢!!

【问题讨论】:

  • 在会话数组中使用另一个级别,例如$_SESSION['list1_data'][] = $data[$i];
  • 我相信你需要做 session_start();在文件的顶部。

标签: php mysql arrays session


【解决方案1】:

问题是您总是覆盖会话数组中的相同数据。循环完成后,您的会话数组中将包含数据集中的最后一行。

每次都可以在会话数组中添加新行:

$_SESSION['list1_data'][] = $data[$i];

或者,如果您想要数据中的特定键(假设它是唯一的):

$_SESSION['list1_data'][$row['purchase_details_id']] = $data[$i];

【讨论】:

  • 最后,一个解释解决方案的答案,而不仅仅是“这样做”=)
  • 谢谢!! @st2rw2od
【解决方案2】:

试试这样的

    while ($row = mysqli_fetch_array($sql)) {

   $data[$i]['purchase_details_id'] = $row['purchase_details_id'];
   $data[$i]['cid'] = $row['id'];
   $data[$i]['item_id'] = $row['item_id'];
   $data[$i]['unit_id'] = $row['unit_id'];
   $data[$i]['quantity'] = $row['quantity'];
   $data[$i]['price'] = $row['price'];
   $data[$i]['conv_rate'] = $row['conv_rate'];

   $_SESSION["db_data"][$i] = $data[$i];// or just $_SESSION[$i] = $data[$i]
 }

【讨论】:

    【解决方案3】:
    $_SESSION['list1_data']['purchase_details_id'] = $data[$i]; always overwrite and you get only last value . use $_SESSION['list1_data'][$row['purchase_details_id']] = $data[$i];    
    

    当您完成循环时,只需将数组分配给会话。如下所示

     $_SESSION['list1_data'] = $data;
    
     or as you say product_id is unique then why you use $i ? (use $data[$row['purchase_details_id']]['purchase_details_id'] = value , use $data[$row['purchase_details_id']]['cid'] = value etc ...)
    

    【讨论】:

      【解决方案4】:

      这样做:

      $_SESSION['list1_data'][$row['purchase_details_id']] = $data[$i];
      

      通过这种方式,您可以直接从会话中访问特定的详细信息 id。例如:

      $row = $_SESSION['list1_data'][1]; //row for the id = 1
      

      专业提示:始终检查密钥是否已设置,否则您会收到警告 =)

      【讨论】:

        【解决方案5】:

        确保您正在初始化 session() 方法,并且您可以创建一个 2 或 3 维数组,因为您需要将数据库值保持为他的 cmets 中提到的@B-and-P。

        谢谢

        【讨论】:

          猜你喜欢
          • 2015-01-27
          • 2011-01-12
          • 2011-11-04
          • 2015-07-16
          • 2013-09-27
          • 1970-01-01
          • 2020-12-31
          • 2021-03-12
          • 1970-01-01
          相关资源
          最近更新 更多