最近学习PDO的相关东西,我的原意是:做N个功能块,分别为初始化、连接数据库、新建数据库、新建数据表、插入数据等,这就要求初始化PDO的时候,能将PDO对象暂存起来,这样后面的功能好调用,但是出了一些错误。
初始化代码如下:
$p=new PDO('mysql:host=localhost;port=3306;dbname=fff',"root","root");
$_SESSION["m"]=serialize($p);
实际运行中,这段代码报错如下:
Fatal error: Uncaught PDOException: You cannot serialize or unserialize PDO
instances in [no active file]:0 Stack trace: #0 [internal function]:
PDO->__sleep() #1 {main} thrown in [no active file] on line 0
这个错误描述用一句话概括:PDO对象无法序列化或反序列化。
那么,究竟如何才能实现将pdo对象暂存呢,通过session或其他方式?
你有点异想天开了,PHP中资源对象是不能进行序列化的。在不同请求中,所有的资源都是重新安排的,如果有重用也是PHP自己安排,不需要你来做。如果在同一请求中,请使用单例模式来设计。
不要存在session中,将对象序列话以后得数据,存储到数据库中,或者,存到本地的文件中,当下次需要的时候拿出来。
为什么要暂存pdo对象呢 方向不对吧
pdo的的各种配置应该在pdo类实例化时就做好吧,不然一个没有配置好的pdo对象有什么用。
参考楼上单例模式