forked from SimplesIP/pabx-app
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
2.4 KiB
90 lines
2.4 KiB
<?php |
|
|
|
namespace app\core; |
|
|
|
use app\shared\Logger; |
|
|
|
use Exception; |
|
use PDO; |
|
use PDOException; |
|
|
|
class Database |
|
{ |
|
private $logger; |
|
|
|
public function __construct() |
|
{ |
|
$this->logger = new Logger('database_' . date('Ymd')); |
|
} |
|
|
|
public function databaseLog() |
|
{ |
|
return $this->logger; |
|
} |
|
|
|
protected function strquery($stmt, $params) |
|
{ |
|
foreach ($params as $key => $value) { |
|
if (is_null($value) || (is_string($value) && $value == '')) { |
|
$value = null; |
|
} |
|
if (is_bool($value)) { |
|
$value = (int)$value; |
|
} |
|
$stmt->bindValue(":{$key}", $value, (is_int($value) ? PDO::PARAM_INT : PDO::PARAM_STR)); |
|
} |
|
} |
|
|
|
function create($query, $data) |
|
{ |
|
try { |
|
$stmt = Connection::getInstance()->prepare($query); |
|
$this->strquery($stmt, $data); |
|
$stmt->execute(); |
|
return Connection::getInstance()->lastInsertId(); |
|
} catch (PDOException $e) { |
|
$this->logger->error(print_r(['error' => $e->getMessage(), 'query' => $query, 'data' => $data], true)); |
|
} |
|
} |
|
|
|
function read($query, $data = null) |
|
{ |
|
try { |
|
$stmt = Connection::getInstance()->prepare($query); |
|
$this->strquery($stmt, $data); |
|
$stmt->execute(); |
|
if ($stmt->rowCount() > 0) { |
|
return $stmt; |
|
} |
|
return null; |
|
} catch (PDOException $e) { |
|
$this->logger->error(print_r(['error' => $e->getMessage(), 'query' => $query, 'data' => $data], true)); |
|
} |
|
} |
|
|
|
function delete($query, $data): int |
|
{ |
|
try { |
|
$stmt = Connection::getInstance()->prepare($query); |
|
$this->strquery($stmt, $data); |
|
$stmt->execute(); |
|
return ($stmt->rowCount() ? 1 : 0); |
|
} catch (Exception $e) { |
|
$this->logger->error(print_r(['error' => $e->getMessage(), 'query' => $query, 'data' => $data], true)); |
|
} |
|
return 0; |
|
} |
|
|
|
function update($query, $data): int |
|
{ |
|
try { |
|
$stmt = Connection::getInstance()->prepare($query); |
|
$this->strquery($stmt, $data); |
|
$stmt->execute(); |
|
return $stmt->rowCount() ? 1 : 0; |
|
} catch (Exception $e) { |
|
$this->logger->error(print_r(['error' => $e->getMessage(), 'query' => $query, 'data' => $data], true)); |
|
} |
|
return 0; |
|
} |
|
}
|
|
|