bug_41997.phpt 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. --TEST--
  2. PDO MySQL Bug #41997 (stored procedure call returning single rowset blocks future queries)
  3. --EXTENSIONS--
  4. pdo_mysql
  5. --SKIPIF--
  6. <?php
  7. require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
  8. MySQLPDOTest::skip();
  9. $db = MySQLPDOTest::factory();
  10. $row = $db->query('SELECT VERSION() as _version')->fetch(PDO::FETCH_ASSOC);
  11. $matches = array();
  12. if (!preg_match('/^(\d+)\.(\d+)\.(\d+)/ismU', $row['_version'], $matches))
  13. die(sprintf("skip Cannot determine MySQL Server version\n"));
  14. $version = $matches[1] * 10000 + $matches[2] * 100 + $matches[3];
  15. if ($version < 50000)
  16. die(sprintf("skip Need MySQL Server 5.0.0+, found %d.%02d.%02d (%d)\n",
  17. $matches[1], $matches[2], $matches[3], $version));
  18. ?>
  19. --FILE--
  20. <?php
  21. require __DIR__ . '/mysql_pdo_test.inc';
  22. $db = MySQLPDOTest::factory();
  23. $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true);
  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. --CLEAN--
  37. <?php
  38. require_once __DIR__ . '/mysql_pdo_test.inc';
  39. $db = MySQLPDOTest::factory();
  40. $db->exec("DROP PROCEDURE IF EXISTS p");
  41. ?>
  42. --EXPECT--
  43. array(1) {
  44. [0]=>
  45. array(1) {
  46. ["one"]=>
  47. string(1) "1"
  48. }
  49. }
  50. array(0) {
  51. }
  52. array(3) {
  53. [0]=>
  54. string(5) "00000"
  55. [1]=>
  56. NULL
  57. [2]=>
  58. NULL
  59. }
  60. array(1) {
  61. [0]=>
  62. array(1) {
  63. ["two"]=>
  64. string(1) "2"
  65. }
  66. }
  67. array(3) {
  68. [0]=>
  69. string(5) "00000"
  70. [1]=>
  71. NULL
  72. [2]=>
  73. NULL
  74. }
  75. done!