pdo_016.phpt 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. --TEST--
  2. PDO Common: PDO::FETCH_BOUND
  3. --EXTENSIONS--
  4. pdo
  5. --SKIPIF--
  6. <?php
  7. $dir = getenv('REDIR_TEST_DIR');
  8. if (false == $dir) die('skip no driver');
  9. if (!strncasecmp(getenv('PDOTEST_DSN'), 'oci', strlen('oci'))) die('skip not relevant for oci driver - cannot reexecute after closing cursors without reparse');
  10. require_once $dir . 'pdo_test.inc';
  11. PDOTest::skip();
  12. ?>
  13. --FILE--
  14. <?php
  15. if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.__DIR__ . '/../../pdo/tests/');
  16. require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc';
  17. $db = PDOTest::factory();
  18. if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') {
  19. $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
  20. }
  21. $db->exec('CREATE TABLE test(idx int NOT NULL PRIMARY KEY, txt VARCHAR(20))');
  22. $db->exec('INSERT INTO test VALUES(0, \'String0\')');
  23. $db->exec('INSERT INTO test VALUES(1, \'String1\')');
  24. $db->exec('INSERT INTO test VALUES(2, \'String2\')');
  25. $stmt1 = $db->prepare('SELECT COUNT(idx) FROM test');
  26. $stmt2 = $db->prepare('SELECT idx, txt FROM test ORDER by idx');
  27. $stmt1->execute();
  28. var_dump($stmt1->fetchColumn());
  29. $stmt1 = null;
  30. $stmt2->execute();
  31. $cont = $stmt2->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_UNIQUE);
  32. var_dump($cont);
  33. echo "===WHILE===\n";
  34. $stmt2->bindColumn('idx', $idx);
  35. $stmt2->bindColumn('txt', $txt);
  36. $stmt2->execute();
  37. while($stmt2->fetch(PDO::FETCH_BOUND)) {
  38. var_dump(array($idx=>$txt));
  39. }
  40. echo "===ALONE===\n";
  41. $stmt3 = $db->prepare('SELECT txt FROM test WHERE idx=:inp');
  42. $stmt3->bindParam(':inp', $idx); /* by foreign name */
  43. $stmt4 = $db->prepare('SELECT idx FROM test WHERE txt=:txt');
  44. $stmt4->bindParam(':txt', $txt); /* using same name */
  45. foreach($cont as $idx => $txt)
  46. {
  47. var_dump(array($idx=>$txt));
  48. var_dump($stmt3->execute());
  49. if ($idx == 0) {
  50. /* portability-wise, you may only bindColumn()s
  51. * after execute() has been called at least once */
  52. $stmt3->bindColumn('txt', $col1);
  53. }
  54. var_dump($stmt3->fetch(PDO::FETCH_BOUND));
  55. $stmt3->closeCursor();
  56. var_dump($stmt4->execute());
  57. if ($idx == 0) {
  58. /* portability-wise, you may only bindColumn()s
  59. * after execute() has been called at least once */
  60. $stmt4->bindColumn('idx', $col2);
  61. }
  62. var_dump($stmt4->fetch(PDO::FETCH_BOUND));
  63. $stmt4->closeCursor();
  64. var_dump(array($col2=>$col1));
  65. }
  66. echo "===REBIND/SAME===\n";
  67. $stmt4->bindColumn('idx', $col1);
  68. foreach($cont as $idx => $txt)
  69. {
  70. var_dump(array($idx=>$txt));
  71. var_dump($stmt3->execute());
  72. var_dump($stmt3->fetch(PDO::FETCH_BOUND));
  73. $stmt3->closeCursor();
  74. var_dump($col1);
  75. var_dump($stmt4->execute());
  76. var_dump($stmt4->fetch(PDO::FETCH_BOUND));
  77. $stmt4->closeCursor();
  78. var_dump($col1);
  79. }
  80. echo "===REBIND/CONFLICT===\n";
  81. $stmt2->bindColumn('idx', $col1);
  82. $stmt2->bindColumn('txt', $col1);
  83. $stmt2->execute();
  84. while($stmt2->fetch(PDO::FETCH_BOUND))
  85. {
  86. var_dump($col1);
  87. }
  88. ?>
  89. --EXPECT--
  90. string(1) "3"
  91. array(3) {
  92. [0]=>
  93. string(7) "String0"
  94. [1]=>
  95. string(7) "String1"
  96. [2]=>
  97. string(7) "String2"
  98. }
  99. ===WHILE===
  100. array(1) {
  101. [0]=>
  102. string(7) "String0"
  103. }
  104. array(1) {
  105. [1]=>
  106. string(7) "String1"
  107. }
  108. array(1) {
  109. [2]=>
  110. string(7) "String2"
  111. }
  112. ===ALONE===
  113. array(1) {
  114. [0]=>
  115. string(7) "String0"
  116. }
  117. bool(true)
  118. bool(true)
  119. bool(true)
  120. bool(true)
  121. array(1) {
  122. [0]=>
  123. string(7) "String0"
  124. }
  125. array(1) {
  126. [1]=>
  127. string(7) "String1"
  128. }
  129. bool(true)
  130. bool(true)
  131. bool(true)
  132. bool(true)
  133. array(1) {
  134. [1]=>
  135. string(7) "String1"
  136. }
  137. array(1) {
  138. [2]=>
  139. string(7) "String2"
  140. }
  141. bool(true)
  142. bool(true)
  143. bool(true)
  144. bool(true)
  145. array(1) {
  146. [2]=>
  147. string(7) "String2"
  148. }
  149. ===REBIND/SAME===
  150. array(1) {
  151. [0]=>
  152. string(7) "String0"
  153. }
  154. bool(true)
  155. bool(true)
  156. string(7) "String0"
  157. bool(true)
  158. bool(true)
  159. string(1) "0"
  160. array(1) {
  161. [1]=>
  162. string(7) "String1"
  163. }
  164. bool(true)
  165. bool(true)
  166. string(7) "String1"
  167. bool(true)
  168. bool(true)
  169. string(1) "1"
  170. array(1) {
  171. [2]=>
  172. string(7) "String2"
  173. }
  174. bool(true)
  175. bool(true)
  176. string(7) "String2"
  177. bool(true)
  178. bool(true)
  179. string(1) "2"
  180. ===REBIND/CONFLICT===
  181. string(7) "String0"
  182. string(7) "String1"
  183. string(7) "String2"