PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_AUTOCOMMIT => false ]; function __construct(\SBRL\TomlConfig $in_settings) { $this->settings = $in_settings; } public function connect() { $this->connection = new \PDO( $this->get_connection_string(), $this->settings->get("database.username"), $this->settings->get("database.password"), ); // Make this connection read-only if(self::read_only) $this->connection->query("SET SESSION TRANSACTION READ ONLY;"); } public function query($sql, $variables) { // FUTURE: Optionally cache prepared statements? return $this->connection->prepare($sql)->execute($variables); } private function get_connection_string() { return "{$this->settings->get("database.type")}:host={$this->settings->get("database.host")};dbname={$this->settings->get("database.name")};charset=utf8mb4"; } }