--TEST-- MySQL PDOStatement->fetch(), PDO::FETCH_SERIALIZE --EXTENSIONS-- pdo_mysql --SKIPIF-- --FILE-- {$prop} = $value; } public function __get($prop) { printf("%s(%s)\n", __METHOD__, $prop); return NULL; } // Singleton public static function singleton($caller) { printf("%s(%s)\n", __METHOD__, $caller); if (!self::$instance) { $c = __CLASS__; self::$instance = new $c($caller); } return self::$instance; } // Serializable public function serialize() { printf("%s()\n", __METHOD__); return 'Data from serialize'; } public function unserialize($data) { printf("%s(%s)\n", __METHOD__, var_export($data, true)); } } $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) printf("[002] Unable to turn off emulated prepared statements\n"); $db->exec(sprintf('CREATE TABLE test_stmt_fetch_serialize(id INT, myobj BLOB) ENGINE=%s', MySQLPDOTest::getTableEngine())); printf("Creating an object, serializing it and writing it to DB...\n"); $id = 1; $obj = myclass::singleton('Creating object'); $myobj = serialize($obj); $stmt = $db->prepare('INSERT INTO test_stmt_fetch_serialize(id, myobj) VALUES (?, ?)'); $stmt->bindValue(1, $id); $stmt->bindValue(2, $myobj); $stmt->execute(); printf("\nUnserializing the previously serialized object...\n"); var_dump(unserialize($myobj)); } catch (PDOException $e) { printf("[001] %s [%s] %s\n", $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); } print "done!\n"; ?> --CLEAN-- exec('DROP TABLE IF EXISTS test_stmt_fetch_serialize'); ?> --EXPECTF-- Deprecated: %s implements the Serializable interface, which is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) in %s on line %d Creating an object, serializing it and writing it to DB... myclass::singleton(Creating object) myclass::__construct(Creating object) myclass::serialize() Unserializing the previously serialized object... myclass::unserialize('Data from serialize') object(myclass)#4 (1) { ["myprotected":protected]=> string(20) "a protected property" } done!