bug_50323.phpt 1.6 KB

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