Air-Quality-Web/logic/Database.php

47 lines
1.3 KiB
PHP

<?php
namespace AirQuality;
/**
* Holds the main database connection.
*/
class Database
{
// Whether the database connection should be read only or not.
// Defaults to true, as we don't need to write _anything_ to the database.
private const read_only = true;
private $connection;
private $pdo_options = [
// https://devdocs.io/php/pdo.setattribute
PDO::ATTR_ERRMODE => 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";
}
}