62 lines
1.7 KiB
PHP
62 lines
1.7 KiB
PHP
![]() |
<?php
|
||
|
namespace Incoviba\Common\Implement;
|
||
|
|
||
|
use PDO;
|
||
|
use PDOStatement;
|
||
|
use PDOException;
|
||
|
use Incoviba\Common\Define;
|
||
|
|
||
|
class Connection implements Define\Connection
|
||
|
{
|
||
|
public function __construct(protected Define\Database $database) {}
|
||
|
|
||
|
protected PDO $connection;
|
||
|
public function connect(): Define\Connection
|
||
|
{
|
||
|
if (!isset($this->connection)) {
|
||
|
if ($this->database->needsUser()) {
|
||
|
$this->connection = new PDO($this->database->getDSN(), $this->database->user, $this->database->password);
|
||
|
} else {
|
||
|
$this->connection = new PDO($this->database->getDSN());
|
||
|
}
|
||
|
}
|
||
|
return $this;
|
||
|
}
|
||
|
public function getPDO(): PDO
|
||
|
{
|
||
|
$this->connect();
|
||
|
return $this->connection;
|
||
|
}
|
||
|
|
||
|
public function query(string $query): PDOStatement
|
||
|
{
|
||
|
$this->connect();
|
||
|
$statement = $this->connection->query($query);
|
||
|
if ($statement === false) {
|
||
|
throw new PDOException("Query failed: '{$query}'");
|
||
|
}
|
||
|
return $statement;
|
||
|
}
|
||
|
public function prepare(string $query): PDOStatement
|
||
|
{
|
||
|
$this->connect();
|
||
|
$statement = $this->connection->prepare($query);
|
||
|
if ($statement === false) {
|
||
|
throw new PDOException("Query failed: '{$query}'");
|
||
|
}
|
||
|
return $statement;
|
||
|
}
|
||
|
public function execute(string $query, ?array $data = null): PDOStatement
|
||
|
{
|
||
|
if ($data === null) {
|
||
|
return $this->query($query);
|
||
|
}
|
||
|
$statement = $this->prepare($query);
|
||
|
$status = $statement->execute($data);
|
||
|
if ($status === false) {
|
||
|
throw new PDOException("Query could not be executed: '{$query}'");
|
||
|
}
|
||
|
return $statement;
|
||
|
}
|
||
|
}
|