bug_41997.phpt 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. --TEST--
  2. PDO MySQL Bug #41997 (stored procedure call returning single rowset blocks future queries)
  3. --XFAIL--
  4. nextRowset() problem with stored proc & emulation mode & mysqlnd
  5. --SKIPIF--
  6. <?php
  7. require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'skipif.inc');
  8. require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
  9. MySQLPDOTest::skip();
  10. $db = MySQLPDOTest::factory();
  11. $row = $db->query('SELECT VERSION() as _version')->fetch(PDO::FETCH_ASSOC);
  12. $matches = array();
  13. if (!preg_match('/^(\d+)\.(\d+)\.(\d+)/ismU', $row['_version'], $matches))
  14. die(sprintf("skip Cannot determine MySQL Server version\n"));
  15. $version = $matches[0] * 10000 + $matches[1] * 100 + $matches[2];
  16. if ($version < 50000)
  17. die(sprintf("skip Need MySQL Server 5.0.0+, found %d.%02d.%02d (%d)\n",
  18. $matches[0], $matches[1], $matches[2], $version));
  19. ?>
  20. --FILE--
  21. <?php
  22. require dirname(__FILE__) . '/mysql_pdo_test.inc';
  23. $db = MySQLPDOTest::factory();
  24. $db->exec('DROP PROCEDURE IF EXISTS p');
  25. $db->exec('CREATE PROCEDURE p() BEGIN SELECT 1 AS "one"; END');
  26. $stmt = $db->query("CALL p()");
  27. do {
  28. var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));
  29. } while ($stmt->nextRowset());
  30. var_dump($stmt->errorInfo());
  31. $stmt = $db->query('SELECT 2 AS "two"');
  32. var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));
  33. var_dump($stmt->errorInfo());
  34. print "done!";
  35. ?>
  36. --EXPECTF--
  37. array(1) {
  38. [0]=>
  39. array(1) {
  40. [%u|b%"one"]=>
  41. %unicode|string%(1) "1"
  42. }
  43. }
  44. array(3) {
  45. [0]=>
  46. %unicode|string%(5) "00000"
  47. [1]=>
  48. NULL
  49. [2]=>
  50. NULL
  51. }
  52. array(1) {
  53. [0]=>
  54. array(1) {
  55. [%u|b%"two"]=>
  56. %unicode|string%(1) "2"
  57. }
  58. }
  59. array(3) {
  60. [0]=>
  61. %unicode|string%(5) "00000"
  62. [1]=>
  63. NULL
  64. [2]=>
  65. NULL
  66. }
  67. done!