bug_71885.phpt 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. --TEST--
  2. PDO Common: FR #71885 (Allow escaping question mark placeholders)
  3. --EXTENSIONS--
  4. pdo
  5. --SKIPIF--
  6. <?php
  7. $dir = getenv('REDIR_TEST_DIR');
  8. if (false == $dir) die('skip no driver');
  9. if (!strncasecmp(getenv('PDOTEST_DSN'), 'pgsql', strlen('pgsql'))) die('skip not relevant for pgsql driver');
  10. if (!strncasecmp(getenv('PDOTEST_DSN'), 'oci', strlen('oci'))) die('skip not relevant for OCI driver');
  11. if (!strncasecmp(getenv('PDOTEST_DSN'), 'odbc', strlen('odbc'))) die('skip inconsistent error message with odbc');
  12. require_once $dir . 'pdo_test.inc';
  13. PDOTest::skip();
  14. ?>
  15. --FILE--
  16. <?php
  17. if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.dirname(__FILE__) . '/../../pdo/tests/');
  18. require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc';
  19. $db = PDOTest::factory();
  20. $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  21. $db->exec("CREATE TABLE test (a int)");
  22. $sql = "SELECT * FROM test WHERE a ?? 1";
  23. try {
  24. $db->exec($sql);
  25. } catch (PDOException $e) {
  26. var_dump(strpos($e->getMessage(), "?") !== false);
  27. }
  28. try {
  29. $stmt = $db->prepare($sql);
  30. $stmt->execute();
  31. } catch (PDOException $e) {
  32. var_dump(strpos($e->getMessage(), "?") !== false);
  33. }
  34. if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') {
  35. $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);
  36. }
  37. try {
  38. $stmt = $db->prepare($sql);
  39. $stmt->execute();
  40. } catch (PDOException $e) {
  41. var_dump(strpos($e->getMessage(), "?") !== false);
  42. }
  43. ?>
  44. --EXPECT--
  45. bool(true)
  46. bool(true)
  47. bool(true)