2009-12-08 100 views
0

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

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

你能提供var_dump($ _ SESSION ['items'])的结果吗? ?您是否在将对象保存到会话中之前序列化了它? – halfdan 2009-12-08 07:14:46

+0

,如果你做了'var_dump($ _ SESSION ['items'])'你的代码对我来说看起来很好。 – RageZ 2009-12-08 07:15:01

+0

Mayme你应该尝试vardump($ _ SESSION ['items']); – Zeemee 2009-12-08 07:15:34

回答

1

我想指出,你应该从来没有像这样的嵌套循环执行查询。相反,你应该符合您的查询像这样的....

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

当然,你需要确保$_SESSION['items']与至少一个值的数组,并在$_SESSION['items']所有值实际上整数(或可以传递给整数[如字符串"6"])。

+0

另外,请确保存储在$ _SESSION ['items']中的值被验证为整数 - 否则,您正在查看SQL注入。 – 2009-12-08 08:00:33

1

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

第1页:

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

第2页:

$user = unserialize($_SESSION['user']); 

最良好的祝愿,
费边

0

最后一点,确保类型 '项' 类定义是装在从会话中反序列化对象之前。否则,当您尝试访问对象上的字段或方法时,您会遇到错误。