我想在会话变量中迭代每个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);
}
答案 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”的类定义。否则,在尝试访问对象上的字段或方法时会出现错误。