bug_50323.phpt 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. --TEST--
  2. Bug #50323 (No ability to connect to database named 't;', no chance to escape semicolon)
  3. --SKIPIF--
  4. <?php
  5. if (!extension_loaded('pdo') || !extension_loaded('pdo_mysql')) die('skip not loaded');
  6. require dirname(__FILE__) . '/config.inc';
  7. require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
  8. PDOTest::skip();
  9. ?>
  10. --FILE--
  11. <?php
  12. require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
  13. $db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');
  14. function changeDSN($original, $new_options) {
  15. $old_options = array();
  16. $dsn = substr($original,
  17. strpos($original, ':') + 1,
  18. strlen($original));
  19. // no real parser - any excotic setting can fool us
  20. $parts = explode(';', $dsn);
  21. foreach ($parts as $k => $v) {
  22. $tmp = explode('=', $v);
  23. if (count($tmp) == 2)
  24. $old_options[$tmp[0]] = $tmp[1];
  25. }
  26. $options = $old_options;
  27. foreach ($new_options as $k => $v)
  28. $options[$k] = $v;
  29. $dsn = 'mysql:';
  30. foreach ($options as $k => $v)
  31. $dsn .= sprintf('%s=%s;', $k, $v);
  32. $dsn = substr($dsn, 0, strlen($dsn) -1);
  33. return $dsn;
  34. }
  35. if (1 === @$db->exec('CREATE DATABASE `crazy;dbname`')) {
  36. $dsn = changeDSN(getenv('PDOTEST_DSN'), array('dbname' => 'crazy;;dbname'));
  37. $user = getenv('PDOTEST_USER');
  38. $pass = getenv('PDOTEST_PASS');
  39. new PDO($dsn, $user, $pass);
  40. }
  41. echo 'done!';
  42. ?>
  43. --CLEAN--
  44. <?php
  45. require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
  46. $db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');
  47. @$db->exec('DROP DATABASE IF EXISTS `crazy;dbname`');
  48. ?>
  49. --EXPECTF--
  50. done!