122 lines
4.0 KiB
PHP
122 lines
4.0 KiB
PHP
<?
|
|
|
|
|
|
class DB {
|
|
static $DB = null;
|
|
static $total_time = 0;
|
|
|
|
static $logs = [];
|
|
static function addLog($q,$time,$res=null){
|
|
self::$logs[] = [
|
|
number_format($time,8),
|
|
$q,
|
|
boolval($res),
|
|
$res===false?mysqli_error(\DB::$DB):null
|
|
];
|
|
}
|
|
|
|
static function execute(Query $q){
|
|
$start = microtime(true);
|
|
$res = mysqli_query(self::$DB,$q->getQueryString());
|
|
$end = (microtime(true)-$start);
|
|
//echo "\n".'<br><br>'.$q->getQueryString().'<br>'.$end.'<br>'; var_dump($res); echo "\n\n";
|
|
self::addLog($q->getQueryString(),$end,$res);
|
|
self::$total_time += $end;
|
|
return $res;
|
|
}
|
|
static function executeString(string $q){ return mysqli_query(self::$DB,$q); }
|
|
|
|
static function startTransaction(){ self::$DB->begin_transaction( MYSQLI_TRANS_START_READ_WRITE); }
|
|
static function endTransaction(){ self::$DB->commit(); }
|
|
|
|
static function numRows($r){return mysqli_num_rows($r);}
|
|
|
|
static function insert(Query $q){
|
|
$r = new stdClass();
|
|
$r->r = $q->execute();
|
|
$r->id = intval(mysqli_insert_id(self::$DB));
|
|
return $r;
|
|
}
|
|
static function addUnique(string $table_name,string $name,array $_cols ){
|
|
$cols = [];
|
|
foreach ($_cols as $v) $cols[] = DB::quotes($v);
|
|
$start = microtime(true);
|
|
DB::executeString($q = 'ALTER TABLE '.DB::quotes($table_name).' ADD UNIQUE '.DB::quotes($name).' ( '.implode(",",$cols).' )');
|
|
$end = (microtime(true)-$start);
|
|
self::addLog($q,$end);
|
|
}
|
|
static function addIndex(string $table_name,string $column ){
|
|
$start = microtime(true);
|
|
DB::executeString($q = 'ALTER TABLE '.DB::quotes($table_name).' ADD INDEX '.$column.'('.DB::quotes($column).')');
|
|
$end = (microtime(true)-$start);
|
|
self::addLog($q,$end);
|
|
}
|
|
static function addIndexManyColumns(string $table_name, $columns = [] ){
|
|
$cols = [];
|
|
foreach ($columns as $col){
|
|
$cols[] = DB::quotes($col);
|
|
}
|
|
$start = microtime(true);
|
|
DB::executeString($q = 'ALTER TABLE '.DB::quotes($table_name).' ADD INDEX '.implode("_",$columns).'('.implode(",",$cols).')');
|
|
$end = (microtime(true)-$start);
|
|
self::addLog($q,$end);
|
|
}
|
|
|
|
static function calcRows():int{
|
|
$res = 0;
|
|
$q = "SELECT FOUND_ROWS()";
|
|
$r = mysqli_query(self::$DB,$q);
|
|
if($r and mysqli_num_rows($r) and $l = mysqli_fetch_array($r)) $res = intval($l[0]);
|
|
return $res;
|
|
}
|
|
static function fetch($r){return mysqli_fetch_assoc($r);}
|
|
|
|
static function mq($x){ return self::$DB->real_escape_string($x);}
|
|
static function mqa(array $a){
|
|
foreach ($a as $k=>$v){$a[$k]=self::mq($v);}
|
|
return $a;
|
|
}
|
|
static function quotes($x) {
|
|
$res = [];
|
|
$a = explode(".",$x);
|
|
foreach ($a as $v){
|
|
$res[] = "`".self::mq($v)."`";
|
|
}
|
|
return implode(".",$res);
|
|
//return "`".self::mq($x)."`";
|
|
}
|
|
|
|
static function connect(){
|
|
$start = microtime(true);
|
|
|
|
|
|
if(Config::$MYSQL_SSL_CERTIFICATE){
|
|
$conn = mysqli_init();
|
|
$conn->options(MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true);
|
|
$conn->ssl_set(NULL, NULL,Config::$MYSQL_SSL_CERTIFICATE, NULL, NULL);
|
|
$conn->real_connect(Config::$MYSQL_HOST, Config::$MYSQL_ADMIN, Config::$MYSQL_PASSWORD, Config::$MYSQL_BASE, 3306, NULL, MYSQLI_CLIENT_SSL);
|
|
self::$DB = $conn;
|
|
} else {
|
|
self::$DB = new mysqli(Config::$MYSQL_HOST, Config::$MYSQL_ADMIN, Config::$MYSQL_PASSWORD, Config::$MYSQL_BASE);
|
|
}
|
|
|
|
mysqli_query(self::$DB, 'SET NAMES '.Config::$MYSQL_CHARSET);
|
|
mysqli_query(self::$DB, "SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));");
|
|
|
|
$end = (microtime(true)-$start);
|
|
|
|
self::addLog('connect',$end);
|
|
}
|
|
|
|
static function connectWithCert(){
|
|
|
|
|
|
}
|
|
|
|
|
|
static function disconnect(){
|
|
self::$DB->close();
|
|
}
|
|
|
|
}
|