82 lines
2.0 KiB
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();
|
|
}
|
|
} |