PaperBag/application/DB.php

82 lines
2.0 KiB
PHP

<?php
class DB {
private static $instance = null;
private $db;
private function __construct(){
$this->db = new mysqli(
Config::get('database', 'host'),
Config::get('database', "user"),
Config::get('database', "pass"),
Config::get('database', "database")
);
if($this->db->connect_error){
die("Connection failed: " . $this->db->connect_error);
}
}
public static function getInstance(): DB {
if(self::$instance == null){
self::$instance = new DB();
}
return self::$instance;
}
public static function query($sql, ...$params){
return self::doQuery(0, $sql, ...$params);
}
public static function queryTest($sql, ...$params){
return self::doQuery(1, $sql, ...$params);
}
public static function queryPreview($sql, ...$params){
return self::doQuery(2, $sql, ...$params);
}
private static function doQuery($mode, $sql, ...$params){
/*
Modes:
0: Execute normally
1: Execute, but print query
2: Only print query
*/
// Check if query parameters comes as an array, or as individual arguments
if(count($params) == 1 && is_array($params[0])){
$params = $params[0];
}
// Create type-specification for query
$types = "";
foreach($params as &$value){
if(is_double($value)){
$types .= "d";
}
elseif(is_integer($value)){
$types .= "i";
}
else {
$types .= "s";
}
}
$db = DB::getInstance();
if($mode >= 1){
printf(str_replace('?', "'%s'", $sql)."\n", ...$params);
}
if($mode >= 2) {
return [];
}
$stmt = $db->db->prepare($sql);
$stmt->bind_param($types, ...$params);
$stmt->execute();
return $stmt->get_result();
}
}