pdo_005.phpt 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. --TEST--
  2. PDO Common: PDO::FETCH_CLASS
  3. --EXTENSIONS--
  4. pdo
  5. --SKIPIF--
  6. <?php
  7. $dir = getenv('REDIR_TEST_DIR');
  8. if (false == $dir) die('skip no driver');
  9. require_once $dir . 'pdo_test.inc';
  10. PDOTest::skip();
  11. ?>
  12. --FILE--
  13. <?php
  14. if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.__DIR__ . '/../../pdo/tests/');
  15. require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc';
  16. $db = PDOTest::factory();
  17. $db->exec('CREATE TABLE test(id int NOT NULL PRIMARY KEY, val VARCHAR(10), val2 VARCHAR(10))');
  18. $db->exec("INSERT INTO test VALUES(1, 'A', 'AA')");
  19. $db->exec("INSERT INTO test VALUES(2, 'B', 'BB')");
  20. $db->exec("INSERT INTO test VALUES(3, 'C', 'CC')");
  21. $stmt = $db->prepare('SELECT id, val, val2 from test');
  22. class TestBase
  23. {
  24. public $id;
  25. protected $val;
  26. private $val2;
  27. }
  28. class TestDerived extends TestBase
  29. {
  30. protected $row;
  31. public function __construct(&$row)
  32. {
  33. echo __METHOD__ . "($row,{$this->id})\n";
  34. $this->row = $row++;
  35. }
  36. }
  37. $stmt->execute();
  38. var_dump($stmt->fetchAll(PDO::FETCH_CLASS));
  39. $stmt->execute();
  40. var_dump($stmt->fetchAll(PDO::FETCH_CLASS, 'TestBase'));
  41. $stmt->execute();
  42. var_dump($stmt->fetchAll(PDO::FETCH_CLASS, 'TestDerived', array(0)));
  43. ?>
  44. --EXPECTF--
  45. array(3) {
  46. [0]=>
  47. object(stdClass)#%d (3) {
  48. ["id"]=>
  49. string(1) "1"
  50. ["val"]=>
  51. string(1) "A"
  52. ["val2"]=>
  53. string(2) "AA"
  54. }
  55. [1]=>
  56. object(stdClass)#%d (3) {
  57. ["id"]=>
  58. string(1) "2"
  59. ["val"]=>
  60. string(1) "B"
  61. ["val2"]=>
  62. string(2) "BB"
  63. }
  64. [2]=>
  65. object(stdClass)#%d (3) {
  66. ["id"]=>
  67. string(1) "3"
  68. ["val"]=>
  69. string(1) "C"
  70. ["val2"]=>
  71. string(2) "CC"
  72. }
  73. }
  74. array(3) {
  75. [0]=>
  76. object(TestBase)#%d (3) {
  77. ["id"]=>
  78. string(1) "1"
  79. ["val":protected]=>
  80. string(1) "A"
  81. ["val2":"TestBase":private]=>
  82. string(2) "AA"
  83. }
  84. [1]=>
  85. object(TestBase)#%d (3) {
  86. ["id"]=>
  87. string(1) "2"
  88. ["val":protected]=>
  89. string(1) "B"
  90. ["val2":"TestBase":private]=>
  91. string(2) "BB"
  92. }
  93. [2]=>
  94. object(TestBase)#%d (3) {
  95. ["id"]=>
  96. string(1) "3"
  97. ["val":protected]=>
  98. string(1) "C"
  99. ["val2":"TestBase":private]=>
  100. string(2) "CC"
  101. }
  102. }
  103. TestDerived::__construct(0,1)
  104. TestDerived::__construct(1,2)
  105. TestDerived::__construct(2,3)
  106. array(3) {
  107. [0]=>
  108. object(TestDerived)#%d (5) {
  109. ["id"]=>
  110. string(1) "1"
  111. ["val":protected]=>
  112. string(1) "A"
  113. ["val2":"TestBase":private]=>
  114. NULL
  115. ["row":protected]=>
  116. int(0)
  117. ["val2"]=>
  118. string(2) "AA"
  119. }
  120. [1]=>
  121. object(TestDerived)#%d (5) {
  122. ["id"]=>
  123. string(1) "2"
  124. ["val":protected]=>
  125. string(1) "B"
  126. ["val2":"TestBase":private]=>
  127. NULL
  128. ["row":protected]=>
  129. int(1)
  130. ["val2"]=>
  131. string(2) "BB"
  132. }
  133. [2]=>
  134. object(TestDerived)#%d (5) {
  135. ["id"]=>
  136. string(1) "3"
  137. ["val":protected]=>
  138. string(1) "C"
  139. ["val2":"TestBase":private]=>
  140. NULL
  141. ["row":protected]=>
  142. int(2)
  143. ["val2"]=>
  144. string(2) "CC"
  145. }
  146. }