sqlite3_defensive.phpt 960 B

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