sqlite3_defensive.phpt 947 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. --TEST--
  2. SQLite3 defensive mode ini setting
  3. --EXTENSIONS--
  4. sqlite3
  5. --SKIPIF--
  6. <?php
  7. if (SQLite3::version()['versionNumber'] < 3026000) {
  8. die("skip: sqlite3 library version < 3.26: no support for defensive mode");
  9. }
  10. ?>
  11. --INI--
  12. sqlite3.defensive=On
  13. --FILE--
  14. <?php
  15. $db = new SQLite3(':memory:');
  16. var_dump($db->exec('CREATE TABLE test (a, b);'));
  17. // This does not generate an error!
  18. var_dump($db->exec('PRAGMA writable_schema = ON;'));
  19. var_dump($db->querySingle('PRAGMA writable_schema;'));
  20. // Should be 1
  21. var_dump($db->querySingle('SELECT COUNT(*) FROM sqlite_master;'));
  22. // Should generate an error!
  23. var_dump($db->querySingle('DELETE FROM sqlite_master;'));
  24. // Should still be 1
  25. var_dump($db->querySingle('SELECT COUNT(*) FROM sqlite_master;'));
  26. ?>
  27. --EXPECTF--
  28. bool(true)
  29. bool(true)
  30. int(1)
  31. int(1)
  32. Warning: SQLite3::querySingle(): Unable to prepare statement: 1, table sqlite_master may not be modified in %s on line %d
  33. bool(false)
  34. int(1)