反序列化后传递的PDO对象出现问题

时间:2012-11-01 12:19:01

标签: php object serialization constructor pdo

你好我序列化了一个对象(Class Users)来设置它在$ _SESSION数组中,当用户登录我的网站时,该对象在$ _SESSION中被设置,后来被反序列化为使用方法,但我有一个问题,就是class I在__constructor中传递PDO对象(连接到MySQL)并且我将一个成员变量设置为PDO Object,但是当我反序列化“容器对象”时它不执行__constructor函数,所以作为PDO的成员变量对象不会被设置.. 我也尝试序列化PDO对象,但我无法序列化PDO对象在扩展的“MyPDO”类中添加__sleep()和__wakeup()函数 我该如何解决?感谢

2 个答案:

答案 0 :(得分:0)

首先,你不应该在会话中存储pdo对象,因为总开放连接有一个限制,当你产生所有连接时会导致错误“连接太多”。这意味着有mysql配置设置my.cnf for max_connection,它定义了可以对mysql数据库进行的最大并发连接。所以你不应该在会话中保存pdo。建议状态甚至连接应该在创建sql查询字符串后创建。

对于每个请求,您都应该创建新连接。如下

// create sql query
// create connection to database
// begin transaction if require
// prepare statement 
// execute query 
// close statement object
// // commit changes if transaction 

答案 1 :(得分:0)

因此,您可以在会话中存储用户详细信息的数组。 除了这个会话之外,对象存储不是文件存储,因此您可以将PDO直接存储到会话中,无需序列化PDO对象。