bug_61411.phpt 1.4 KB

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