Files
nexusphp/include/database/class_db.php

126 lines
2.4 KiB
PHP
Raw Normal View History

<?php
class DB
{
2021-01-04 20:47:22 +08:00
private $driver;
private static $instance;
2021-01-04 20:47:22 +08:00
private static $queries = [];
private $isConnected = false;
private function __construct()
{
}
private function __clone()
{
}
public function setDriver(DBInterface $driver)
{
$this->driver = $driver;
return $this;
}
public static function getInstance()
{
if (self::$instance) {
return self::$instance;
}
$instance = new self;
$driver = new DBMysqli();
$instance->setDriver($driver);
return self::$instance = $instance;
}
public function connect($host, $username, $password, $database, $port)
{
if (!$this->isConnected) {
$this->driver->connect($host, $username, $password, $database, $port);
$this->isConnected = true;
}
return true;
}
public function query(string $sql)
{
2020-12-28 02:14:41 +08:00
try {
return $this->driver->query($sql);
} catch (\Exception $e) {
do_log(sprintf("%s [%s] %s", $e->getMessage(), $sql, $e->getTraceAsString()));
2020-12-28 02:14:41 +08:00
throw new \DatabaseException($sql, $e->getMessage());
}
}
public function error()
{
return $this->driver->error();
}
public function errno()
{
return $this->driver->errno();
}
public function numRows($result)
{
return $this->driver->numRows($result);
}
public function select_db($database)
{
return $this->driver->selectDb($database);
}
public function fetchAssoc($result)
{
return $this->driver->fetchAssoc($result);
}
public function fetchRow($result)
{
return $this->driver->fetchRow($result);
}
2020-12-28 02:14:41 +08:00
public function fetchArray($result, $type = null)
{
return $this->driver->fetchArray($result, $type);
}
public function affectedRows()
{
return $this->driver->affectedRows();
}
public function escapeString(string $string)
{
return $this->driver->escapeString($string);
}
2020-12-28 20:52:54 +08:00
public function lastInsertId()
{
return $this->driver->lastInsertId();
}
2021-01-07 17:35:00 +08:00
public function freeResult($result)
{
return $this->driver->freeResult($result);
}
public function isConnected()
{
return $this->isConnected;
}
}