cart
からクラスに PDO 接続を渡す必要がありますcontroller
。
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);
}
このエラーが発生します。
致命的なエラー: C:\wamp\www\store_2012_MVC\local\controllers\class_base_extended_cart.php:89 でメッセージ「PDO インスタンスをシリアル化または非シリアル化できません」を含む例外「PDOException」をキャッチできません:89 スタック トレース: #0 [内部関数]: 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 C:\wamp\www\store_2012_MVC でスローされる {main} \local\controllers\class_base_extended_cart.php 行 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;
}
}