bug_71447.phpt 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. --TEST--
  2. PDO Common: Bug #71447 (Quotes inside comments not properly handled)
  3. --EXTENSIONS--
  4. pdo
  5. --SKIPIF--
  6. <?php
  7. $dir = getenv('REDIR_TEST_DIR');
  8. if (false == $dir) die('skip no driver');
  9. require_once $dir . 'pdo_test.inc';
  10. PDOTest::skip();
  11. ?>
  12. --FILE--
  13. <?php
  14. if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.__DIR__ . '/../../pdo/tests/');
  15. require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc';
  16. $db = PDOTest::factory();
  17. $db->setAttribute (\PDO::ATTR_ERRMODE, \PDO::ERRMODE_WARNING);
  18. $db->setAttribute (\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_NUM);
  19. $db->setAttribute (\PDO::ATTR_EMULATE_PREPARES, false);
  20. $db->exec('CREATE TABLE test(id int)');
  21. $db->exec('INSERT INTO test VALUES(1)');
  22. // Comment without quotes or placeholders
  23. $stmt = $db->prepare("
  24. SELECT -- That's all folks!
  25. '\"abc\":8000'
  26. FROM test
  27. ");
  28. $stmt->execute();
  29. var_dump($stmt->fetchColumn());
  30. // Comment and placeholder within a string
  31. $stmt = $db->prepare("
  32. SELECT
  33. '\"abc\":8001 -- Wat?'
  34. FROM test
  35. ");
  36. $stmt->execute();
  37. var_dump($stmt->fetchColumn());
  38. // Comment with single quote
  39. $stmt = $db->prepare("
  40. SELECT -- That's all folks!
  41. '\"abc\":8002'
  42. FROM test
  43. ");
  44. $stmt->execute();
  45. var_dump($stmt->fetchColumn());
  46. // C-Style comment with single quote
  47. $stmt = $db->prepare("
  48. SELECT /* That's all folks! */
  49. '\"abc\":8003'
  50. FROM test
  51. ");
  52. $stmt->execute();
  53. var_dump($stmt->fetchColumn());
  54. // Comment with double quote
  55. $stmt = $db->prepare("
  56. SELECT -- Is it only \"single quotes?
  57. '\"abc\":8004'
  58. FROM test
  59. ");
  60. $stmt->execute();
  61. var_dump($stmt->fetchColumn());
  62. // Comment with ? placeholder
  63. $stmt = $db->prepare("
  64. SELECT -- What about question marks here?
  65. *
  66. FROM test
  67. WHERE id = ?
  68. ");
  69. $stmt->execute([1]);
  70. var_dump($stmt->fetchColumn());
  71. // Comment with named placeholder
  72. $stmt = $db->prepare("
  73. SELECT -- What about placeholders :bar
  74. *
  75. FROM test
  76. WHERE id = :id
  77. ");
  78. $stmt->execute(['id' => 1]);
  79. var_dump($stmt->fetchColumn());
  80. ?>
  81. --EXPECT--
  82. string(10) ""abc":8000"
  83. string(18) ""abc":8001 -- Wat?"
  84. string(10) ""abc":8002"
  85. string(10) ""abc":8003"
  86. string(10) ""abc":8004"
  87. string(1) "1"
  88. string(1) "1"