php pdo对象序列化,PHP PDO – 无法序列化或反序列化PDO实例

在尝试使用serialize()存储包含PDO实例的session时遇到了致命错误。问题出在PDO对象不能被序列化。尝试使用__sleep()和__wakeup()魔术方法未解决问题。可能的解决方案是不直接存储PDO实例,而是存储其连接参数并在需要时重新建立连接。
摘要由CSDN通过智能技术生成

我需要将PDO连接从控制器传递到购物车类,

function __construct($connection)

{

$this->cart = new cart($connection);

}

但我认为问题出在serialize()

public function render_page()

{

if (!isset($_SESSION[SESSION_CART]))

{

$cart = $this->cart;

}

else

{

$cart = unserialize($_SESSION[SESSION_CART]);

}

$_SESSION[SESSION_CART] = serialize($cart);

}

我收到这个错误,

Fatal error: Uncaught exception ‘PDOException’ with message ‘You

cannot serialize or unserialize PDO instances’ in

C:\wamp\www\store_2012_MVC\local\controllers\class_base_extended_cart.php:89

Stack trace: #0 [internal function]: PDO->__sleep() #1

C:\wamp\www\store_2012_MVC\local\controllers\class_base_extended_cart.php(89):

serialize(Object(cart)) #2

C:\wamp\www\store_2012_MVC\local\controllers\class_factory.php(75):

base_extended_cart->render_page() #3

C:\wamp\www\store_2012_MVC\index.php(69): factory->render() #4 {main}

thrown in

C:\wamp\www\store_2012_MVC\local\controllers\class_base_extended_cart.php

on line 89

我怎样才能解决这个问题?

或者我可以使用其他东西而不是serialize()?

编辑:

我用__sleep和__wakeup魔术方法尝试过但仍然得到同样的错误,

class database_pdo

{

# database handler

protected $connection = null;

# make a connection

public function __construct($dsn,$username,$password)

{

try

{

$this->connection = new PDO($dsn, $username, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

$this->connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}

catch (PDOException $e)

{

# call the get_error function

$this->get_error($e);

}

}

# don't forget to add getter method to get $this->connection, it's just a good practice.

public function get_connection()

{

return $this->connection;

}

public function __sleep()

{

return array('connection');

}

public function __wakeup()

{

$this->connection;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值