bug_61411.phpt 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. --TEST--
  2. Bug #61411 (PDO Segfaults with PERSISTENT == TRUE && EMULATE_PREPARES == FALSE)
  3. --EXTENSIONS--
  4. pdo
  5. pdo_mysql
  6. --SKIPIF--
  7. <?php
  8. require_once(__DIR__ . 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[1] * 10000 + $matches[2] * 100 + $matches[3];
  16. if ($version < 40106)
  17. die(sprintf("skip Need MySQL Server 4.1.6+, found %d.%02d.%02d (%d)\n",
  18. $matches[1], $matches[2], $matches[3], $version));
  19. ?>
  20. --FILE--
  21. <?php
  22. require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
  23. $attr = getenv('PDOTEST_ATTR');
  24. if (!$attr) {
  25. $attr = array();
  26. } else {
  27. $attr = unserialize($attr);
  28. }
  29. $attr[PDO::ATTR_PERSISTENT] = true;
  30. $attr[PDO::ATTR_EMULATE_PREPARES] = false;
  31. $attr[PDO::ATTR_STRINGIFY_FETCHES] = true;
  32. putenv('PDOTEST_ATTR='.serialize($attr));
  33. $db = MySQLPDOTest::factory();
  34. $stmt = $db->prepare("SELECT 1");
  35. $stmt->execute();
  36. foreach ($stmt as $line) {
  37. var_dump($line);
  38. }
  39. print "done!";
  40. ?>
  41. --EXPECT--
  42. array(2) {
  43. [1]=>
  44. string(1) "1"
  45. [0]=>
  46. string(1) "1"
  47. }
  48. done!