foreach通过会话变量

时间:2009-12-08 07:12:19

标签: php object session foreach

我想在会话变量中迭代每个Object。 'items'是类型item,它是我创建的用于存储书籍信息的类。我做了一个计数($ _ SESSION ['items']),返回1,所以我认为它应该至少迭代一次。但没有运气。谢谢

  foreach ($_SESSION['items'] as $item) {
      echo TEST;
      $sql = 'SELECT * FROM item WHERE Item_ID = '.$item->Get_Item_ID;
    var_dump($sql);
    }

4 个答案:

答案 0 :(得分:3)

为什么要在会话变量中存储对象?

http://php.net/manual/en/function.serialize.php

应该能够将对象序列化和反序列化为可以存储在cookie中的格式。

我认为$ _SESSION只能存储字符串和数组。

答案 1 :(得分:1)

我想请注意,您应该永远在嵌套循环中执行查询。相反,你应该像这样限定你的查询......

$sql = "SELECT * FROM item WHERE Item_ID IN (".implode(",", $_SESSION['items']).")";

当然,您需要确保$_SESSION['items']是一个至少包含一个值的数组,并且$_SESSION['items']中的所有值实际上都是整数(或者可以传递整数[例如string { {1}}])。

答案 2 :(得分:1)

我认为您忘记序列化/反序列化对象。仅将对象分配给会话变量是不可能的。这是因为会话被写入您的对象停止存在的文件中。使用serialization将对象存储到会话中。

第1页:

 $user = new User();
 $_SESSION['user'] = serialize($user);

第2页:

 $user = unserialize($_SESSION['user']);
祝你好运,
费边

答案 3 :(得分:0)

最后,确保在从会话反序列化对象之前加载类型“item”的类定义。否则,在尝试访问对象上的字段或方法时会出现错误。