bug_44861.phpt 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. --TEST--
  2. PDO Common: Bug #44861 (scrollable cursor don't work with pgsql)
  3. --EXTENSIONS--
  4. pdo
  5. --SKIPIF--
  6. <?php
  7. $dir = getenv('REDIR_TEST_DIR');
  8. if (false == $dir) die('skip no driver');
  9. $allowed = array('oci', 'pgsql');
  10. $ok = false;
  11. foreach ($allowed as $driver) {
  12. if (!strncasecmp(getenv('PDOTEST_DSN'), $driver, strlen($driver))) {
  13. $ok = true;
  14. }
  15. }
  16. if (!$ok) {
  17. die("skip Scrollable cursors not supported");
  18. }
  19. require_once $dir . 'pdo_test.inc';
  20. PDOTest::skip();
  21. ?>
  22. --FILE--
  23. <?php
  24. if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.__DIR__ . '/../../pdo/tests/');
  25. require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc';
  26. $db = PDOTest::factory();
  27. $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  28. if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'oci') {
  29. $from = 'FROM DUAL';
  30. $ob = '1';
  31. } else {
  32. $from = '';
  33. $ob = 'r';
  34. }
  35. $query = "SELECT 'row1' AS r $from UNION SELECT 'row2' $from UNION SELECT 'row3' $from UNION SELECT 'row4' $from ORDER BY $ob";
  36. $aParams = array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL);
  37. $res = $db->prepare($query, $aParams);
  38. $res->execute();
  39. var_dump($res->fetchColumn());
  40. var_dump($res->fetchColumn());
  41. var_dump($res->fetchColumn());
  42. var_dump($res->fetchColumn());
  43. var_dump($res->fetchColumn());
  44. var_dump($res->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_ABS, 3));
  45. var_dump($res->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_PRIOR));
  46. var_dump($res->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_FIRST));
  47. var_dump($res->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_LAST));
  48. var_dump($res->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_REL, -1));
  49. var_dump($res->fetchAll(PDO::FETCH_ASSOC));
  50. // Test binding params via emulated prepared query
  51. $res = $db->prepare("SELECT ? $from", $aParams);
  52. $res->execute(array("it's working"));
  53. var_dump($res->fetch(PDO::FETCH_NUM));
  54. // Test bug #48188, trying to execute again
  55. $res->execute(array("try again"));
  56. var_dump($res->fetchColumn());
  57. var_dump($res->fetchColumn());
  58. ?>
  59. --EXPECT--
  60. string(4) "row1"
  61. string(4) "row2"
  62. string(4) "row3"
  63. string(4) "row4"
  64. bool(false)
  65. array(1) {
  66. [0]=>
  67. string(4) "row3"
  68. }
  69. array(1) {
  70. [0]=>
  71. string(4) "row2"
  72. }
  73. array(1) {
  74. [0]=>
  75. string(4) "row1"
  76. }
  77. array(1) {
  78. [0]=>
  79. string(4) "row4"
  80. }
  81. array(1) {
  82. [0]=>
  83. string(4) "row3"
  84. }
  85. array(1) {
  86. [0]=>
  87. array(1) {
  88. ["r"]=>
  89. string(4) "row4"
  90. }
  91. }
  92. array(1) {
  93. [0]=>
  94. string(12) "it's working"
  95. }
  96. string(9) "try again"
  97. bool(false)