bug_39858.phpt 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. --TEST--
  2. Bug #39858 (Lost connection to MySQL server during query by a repeated call stored proced)
  3. --SKIPIF--
  4. <?php
  5. if (!extension_loaded('pdo') || !extension_loaded('pdo_mysql')) die('skip not loaded');
  6. require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'skipif.inc');
  7. require_once(dirname(__FILE__) . 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[0] * 10000 + $matches[1] * 100 + $matches[2];
  15. if ($version < 50000)
  16. die(sprintf("skip Need MySQL Server 5.0.0+, found %d.%02d.%02d (%d)\n",
  17. $matches[0], $matches[1], $matches[2], $version));
  18. ?>
  19. --XFAIL--
  20. nextRowset() problem with stored proc & emulation mode & mysqlnd
  21. --FILE--
  22. <?php
  23. require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
  24. $db = MySQLPDOTest::factory();
  25. $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true);
  26. function bug_39858($db) {
  27. $db->exec("DROP PROCEDURE IF EXISTS p");
  28. $db->exec("
  29. CREATE PROCEDURE p()
  30. NOT DETERMINISTIC
  31. CONTAINS SQL
  32. SQL SECURITY DEFINER
  33. COMMENT ''
  34. BEGIN
  35. SELECT 2 * 2;
  36. END;");
  37. $stmt = $db->prepare("CALL p()");
  38. $stmt->execute();
  39. do {
  40. var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));
  41. } while ($stmt->nextRowset());
  42. $stmt = $db->prepare("CALL p()");
  43. $stmt->execute();
  44. do {
  45. var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));
  46. } while ($stmt->nextRowset());
  47. $stmt->closeCursor();
  48. }
  49. printf("Emulated Prepared Statements...\n");
  50. $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);
  51. bug_39858($db);
  52. printf("Native Prepared Statements...\n");
  53. $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0);
  54. bug_39858($db);
  55. print "done!";
  56. ?>
  57. --CLEAN--
  58. <?php
  59. require dirname(__FILE__) . '/mysql_pdo_test.inc';
  60. $db = MySQLPDOTest::factory();
  61. $db->exec("DROP PROCEDURE IF EXISTS p");
  62. ?>
  63. --EXPECTF--
  64. Emulated Prepared Statements...
  65. array(1) {
  66. [0]=>
  67. array(1) {
  68. [%u|b%"2 * 2"]=>
  69. %unicode|string%(1) "4"
  70. }
  71. }
  72. array(1) {
  73. [0]=>
  74. array(1) {
  75. [%u|b%"2 * 2"]=>
  76. %unicode|string%(1) "4"
  77. }
  78. }
  79. Native Prepared Statements...
  80. array(1) {
  81. [0]=>
  82. array(1) {
  83. [%u|b%"2 * 2"]=>
  84. %unicode|string%(1) "4"
  85. }
  86. }
  87. array(1) {
  88. [0]=>
  89. array(1) {
  90. [%u|b%"2 * 2"]=>
  91. %unicode|string%(1) "4"
  92. }
  93. }
  94. done!