parent
e7e1cb83d2
commit
4ea28cdbff
@ -0,0 +1,46 @@ |
||||
<?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"; |
||||
} |
||||
} |
Loading…
Reference in new issue