⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pdo_018.phpt

📁 PHP v6.0 For Linux 运行环境:Win9X/ WinME/ WinNT/ Win2K/ WinXP
💻 PHPT
字号:
--TEST--PDO Common: serializing--SKIPIF--<?php # vim:ft=phpif (!extension_loaded('pdo')) die('skip');if (!interface_exists('Serializable')) die('skip no Serializable interface');$dir = getenv('REDIR_TEST_DIR');if (false == $dir) die('skip no driver');require_once $dir . 'pdo_test.inc';PDOTest::skip();?>--FILE--<?phpif (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.dirname(__FILE__) . '/../../pdo/tests/'); require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc';$db = PDOTest::factory();class TestBase implements Serializable{	public    $BasePub = 'Public';	protected $BasePro = 'Protected';	private   $BasePri = 'Private';		function serialize()	{		$serialized = array();		foreach($this as $prop => $val) {			$serialized[$prop] = $val;		}		$serialized = serialize($serialized);		echo __METHOD__ . "() = '$serialized'\n";		return $serialized;	}		function unserialize($serialized)	{		echo __METHOD__ . "($serialized)\n";		foreach(unserialize($serialized) as $prop => $val) {			$this->$prop = '#'.$val;		}		return true;	}}class TestDerived extends TestBase{	public    $BasePub    = 'DerivedPublic';	protected $BasePro    = 'DerivdeProtected';	public    $DerivedPub = 'Public';	protected $DerivedPro = 'Protected';	private   $DerivedPri = 'Private';	function serialize()	{		echo __METHOD__ . "()\n";		return TestBase::serialize();	}		function unserialize($serialized)	{		echo __METHOD__ . "()\n";		return TestBase::unserialize($serialized);	}}class TestLeaf extends TestDerived{}$db->exec('CREATE TABLE classtypes(id int NOT NULL PRIMARY KEY, name VARCHAR(20) NOT NULL UNIQUE)');$db->exec('INSERT INTO classtypes VALUES(0, \'stdClass\')'); $db->exec('INSERT INTO classtypes VALUES(1, \'TestBase\')'); $db->exec('INSERT INTO classtypes VALUES(2, \'TestDerived\')'); $db->exec('CREATE TABLE test(id int NOT NULL PRIMARY KEY, classtype int, val VARCHAR(255))');$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);var_dump($db->query('SELECT COUNT(*) FROM classtypes')->fetchColumn());var_dump($db->query('SELECT id, name FROM classtypes ORDER by id')->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_UNIQUE));$objs = array();$objs[0] = new stdClass;$objs[1] = new TestBase;$objs[2] = new TestDerived;$objs[3] = new TestLeaf;$stmt = $db->prepare('SELECT id FROM classtypes WHERE name=:cname');$stmt->bindParam(':cname', $cname);$ctypes = array();foreach($objs as $obj){	$cname = get_class($obj);	$ctype = NULL; /* set default for non stored class name */	$stmt->execute();	$stmt->bindColumn('id', $ctype);	$stmt->fetch(PDO::FETCH_BOUND);	$ctypes[$cname] = $ctype;}echo "===TYPES===\n";var_dump($ctypes);unset($stmt);echo "===INSERT===\n";$stmt = $db->prepare('INSERT INTO test VALUES(:id, :classtype, :val)');$stmt->bindParam(':id', $idx);$stmt->bindParam(':classtype', $ctype);$stmt->bindParam(':val', $val);foreach($objs as $idx => $obj){	$ctype = $ctypes[get_class($obj)];	if (method_exists($obj, 'serialize'))	{		$val = $obj->serialize();	}	else	{		$val = '';	}	$stmt->execute();	}unset($stmt);echo "===DATA===\n";var_dump($db->query('SELECT test.val FROM test')->fetchAll(PDO::FETCH_COLUMN));echo "===FAILURE===\n";try{	$db->query('SELECT classtypes.name AS name, test.val AS val FROM test LEFT JOIN classtypes ON test.classtype=classtypes.id')->fetchAll(PDO::FETCH_CLASS|PDO::FETCH_CLASSTYPE|PDO::FETCH_SERIALIZE, 'TestLeaf', array());}catch (PDOException $e){	echo 'Exception:';	echo $e->getMessage()."\n";}echo "===COUNT===\n";var_dump($db->query('SELECT COUNT(*) FROM test LEFT JOIN classtypes ON test.classtype=classtypes.id WHERE (classtypes.id IS NULL OR classtypes.id > 0)')->fetchColumn());echo "===DATABASE===\n";$stmt = $db->prepare('SELECT classtypes.name AS name, test.val AS val FROM test LEFT JOIN classtypes ON test.classtype=classtypes.id WHERE (classtypes.id IS NULL OR classtypes.id > 0)');$stmt->execute();var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));echo "===FETCHCLASS===\n";$stmt->execute();var_dump($stmt->fetchAll(PDO::FETCH_CLASS|PDO::FETCH_CLASSTYPE|PDO::FETCH_SERIALIZE, 'TestLeaf'));?>--EXPECTF--string(1) "3"array(3) {  [0]=>  string(8) "stdClass"  [1]=>  string(8) "TestBase"  [2]=>  string(11) "TestDerived"}===TYPES===array(4) {  ["stdClass"]=>  string(1) "0"  ["TestBase"]=>  string(1) "1"  ["TestDerived"]=>  string(1) "2"  ["TestLeaf"]=>  NULL}===INSERT===TestBase::serialize() = 'a:3:{s:7:"BasePub";s:6:"Public";s:7:"BasePro";s:9:"Protected";s:7:"BasePri";s:7:"Private";}'TestDerived::serialize()TestBase::serialize() = 'a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}'TestDerived::serialize()TestBase::serialize() = 'a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}'===DATA===array(4) {  [0]=>  string(0) ""  [1]=>  string(91) "a:3:{s:7:"BasePub";s:6:"Public";s:7:"BasePro";s:9:"Protected";s:7:"BasePri";s:7:"Private";}"  [2]=>  string(144) "a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}"  [3]=>  string(144) "a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}"}===FAILURE===Exception:SQLSTATE[HY000]: General error: cannot unserialize class===COUNT===string(1) "3"===DATABASE===array(3) {  [0]=>  array(2) {    ["name"]=>    string(8) "TestBase"    ["val"]=>    string(91) "a:3:{s:7:"BasePub";s:6:"Public";s:7:"BasePro";s:9:"Protected";s:7:"BasePri";s:7:"Private";}"  }  [1]=>  array(2) {    ["name"]=>    string(11) "TestDerived"    ["val"]=>    string(144) "a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}"  }  [2]=>  array(2) {    ["name"]=>    NULL    ["val"]=>    string(144) "a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}"  }}===FETCHCLASS===TestBase::unserialize(a:3:{s:7:"BasePub";s:6:"Public";s:7:"BasePro";s:9:"Protected";s:7:"BasePri";s:7:"Private";})TestDerived::unserialize()TestBase::unserialize(a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";})TestDerived::unserialize()TestBase::unserialize(a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";})array(3) {  [0]=>  object(TestBase)#%d (3) {    ["BasePub"]=>    string(7) "#Public"    ["BasePro":protected]=>    string(10) "#Protected"    ["BasePri":"TestBase":private]=>    string(8) "#Private"  }  [1]=>  object(TestDerived)#%d (6) {    ["BasePub"]=>    string(14) "#DerivedPublic"    ["BasePro":protected]=>    string(17) "#DerivdeProtected"    ["DerivedPub"]=>    string(7) "#Public"    ["DerivedPro":protected]=>    string(10) "#Protected"    ["DerivedPri":"TestDerived":private]=>    string(7) "Private"    ["BasePri":"TestBase":private]=>    string(7) "Private"  }  [2]=>  object(TestLeaf)#%d (6) {    ["BasePub"]=>    string(14) "#DerivedPublic"    ["BasePro":protected]=>    string(17) "#DerivdeProtected"    ["DerivedPub"]=>    string(7) "#Public"    ["DerivedPro":protected]=>    string(10) "#Protected"    ["DerivedPri":"TestDerived":private]=>    string(7) "Private"    ["BasePri":"TestBase":private]=>    string(7) "Private"  }}--UEXPECTF--unicode(1) "3"array(3) {  [0]=>  unicode(8) "stdClass"  [1]=>  unicode(8) "TestBase"  [2]=>  unicode(11) "TestDerived"}===TYPES===array(4) {  [u"stdClass"]=>  unicode(1) "0"  [u"TestBase"]=>  unicode(1) "1"  [u"TestDerived"]=>  unicode(1) "2"  [u"TestLeaf"]=>  NULL}===INSERT===TestBase::serialize() = 'a:3:{s:7:"BasePub";s:6:"Public";s:7:"BasePro";s:9:"Protected";s:7:"BasePri";s:7:"Private";}'TestDerived::serialize()TestBase::serialize() = 'a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}'TestDerived::serialize()TestBase::serialize() = 'a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}'===DATA===array(4) {  [0]=>  unicode(0) ""  [1]=>  unicode(91) "a:3:{s:7:"BasePub";s:6:"Public";s:7:"BasePro";s:9:"Protected";s:7:"BasePri";s:7:"Private";}"  [2]=>  unicode(144) "a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}"  [3]=>  unicode(144) "a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}"}===FAILURE===Exception:SQLSTATE[HY000]: General error: cannot unserialize class===COUNT===unicode(1) "3"===DATABASE===array(3) {  [0]=>  array(2) {    [u"name"]=>    unicode(8) "TestBase"    [u"val"]=>    unicode(91) "a:3:{s:7:"BasePub";s:6:"Public";s:7:"BasePro";s:9:"Protected";s:7:"BasePri";s:7:"Private";}"  }  [1]=>  array(2) {    [u"name"]=>    unicode(11) "TestDerived"    [u"val"]=>    unicode(144) "a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}"  }  [2]=>  array(2) {    [u"name"]=>    NULL    [u"val"]=>    unicode(144) "a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";}"  }}===FETCHCLASS===TestBase::unserialize(a:3:{s:7:"BasePub";s:6:"Public";s:7:"BasePro";s:9:"Protected";s:7:"BasePri";s:7:"Private";})TestDerived::unserialize()TestBase::unserialize(a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";})TestDerived::unserialize()TestBase::unserialize(a:4:{s:7:"BasePub";s:13:"DerivedPublic";s:7:"BasePro";s:16:"DerivdeProtected";s:10:"DerivedPub";s:6:"Public";s:10:"DerivedPro";s:9:"Protected";})array(3) {  [0]=>  object(TestBase)#%d (3) {    [u"BasePub"]=>    unicode(7) "#Public"    [u"BasePro":protected]=>    unicode(10) "#Protected"    [u"BasePri":u"TestBase":private]=>    unicode(8) "#Private"  }  [1]=>  object(TestDerived)#%d (6) {    [u"BasePub"]=>    unicode(14) "#DerivedPublic"    [u"BasePro":protected]=>    unicode(17) "#DerivdeProtected"    [u"DerivedPub"]=>    unicode(7) "#Public"    [u"DerivedPro":protected]=>    unicode(10) "#Protected"    [u"DerivedPri":u"TestDerived":private]=>    unicode(7) "Private"    [u"BasePri":u"TestBase":private]=>    unicode(7) "Private"  }  [2]=>  object(TestLeaf)#%d (6) {    [u"BasePub"]=>    unicode(14) "#DerivedPublic"    [u"BasePro":protected]=>    unicode(17) "#DerivdeProtected"    [u"DerivedPub"]=>    unicode(7) "#Public"    [u"DerivedPro":protected]=>    unicode(10) "#Protected"    [u"DerivedPri":u"TestDerived":private]=>    unicode(7) "Private"    [u"BasePri":u"TestBase":private]=>    unicode(7) "Private"  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -