3 Commits
Author SHA1 Message Date
meandClaude Sonnet 5 d9bc65418f Simplify Database into a pure PDO wrapper with a create() factory
Constructor now only accepts a pre-built PDO; connection setup and
attribute configuration move into a new static create() method. Drops
the unused Statement/Row helper classes and the broken sql_mode init
command option.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-05 13:57:06 +07:00
me 76e69d6054 update 2026-09-05 13:38:52 +07:00
me f6cfe6f117 update 2026-09-04 09:15:10 +07:00
3 changed files with 24 additions and 128 deletions

No files matched your search

+24 -87
View File
@@ -12,31 +12,36 @@ class Database
*/ */
private $driver; private $driver;
public function __construct( /**
* @param PDO $pdo
*/
public function __construct($pdo)
{
$this->driver = $pdo;
}
/**
* @param string $dsn
* @param string|null $username
* @param string|null $password
* @param array|null $options
* @return self
*/
public static function create(
$dsn, $dsn,
$username = null, $username = null,
$password = null, $password = null,
$options = null $options = null
) { ) {
if ($dsn instanceof PDO) { $pdo = new PDO($dsn, $username, $password, (array) $options);
$this->driver = $dsn;
} else {
$this->driver = new PDO(
$dsn,
$username,
$password,
array_merge([
PDO::MYSQL_ATTR_INIT_COMMAND, 'SET sql_mode="ANSI,TRADITIONAL"'
], (array) $options)
);
}
$this->driver->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->driver->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$this->driver->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_CLASS); $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$this->driver->setAttribute(PDO::ATTR_STATEMENT_CLASS, [Statement::class]);
$this->driver->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true); $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
return new self($pdo);
} }
public function driver() public function driver()
@@ -57,20 +62,6 @@ class Database
return $stmt; return $stmt;
} }
/**
* giống exec() nhưng dùng prepare
*
* @param string $sql
* @param array|null $params
* @return int
*/
public function query_count($sql, $params = null)
{
$stmt = self::query($sql, $params);
return $stmt->rowCount();
}
/** /**
* @param string $table * @param string $table
* @param array $params * @param array $params
@@ -79,7 +70,7 @@ class Database
public function insert($table, $params) public function insert($table, $params)
{ {
$sql = 'insert into "' . $table . '"' $sql = 'insert into "' . $table . '"'
. ' (' . implode(',', $this->buildName(array_keys($params))) . ')' . ' (' . implode(',', $this->build_name(array_keys($params))) . ')'
. ' values (' . implode(',', array_fill(0, count($params), '?')) . ')'; . ' values (' . implode(',', array_fill(0, count($params), '?')) . ')';
//dd($sql); //dd($sql);
$this->query($sql, array_values($params)); $this->query($sql, array_values($params));
@@ -125,17 +116,6 @@ class Database
} }
} }
/**
* @param string $sql
* @param array|null $params
* @return int
*/
public function update($sql, $params = null)
{
$stmt = $this->query($sql, $params);
return $stmt->rowCount();
}
/** /**
* @param string $sql * @param string $sql
* @param array|null $params * @param array|null $params
@@ -151,16 +131,6 @@ class Database
return $this->driver->exec($sql); return $this->driver->exec($sql);
} }
/**
* @param string $sql
* @param array|null $params
* @return array
*/
public function fetchAll($sql, $params = null)
{
return $this->query($sql, $params)->fetchAll();
}
/** /**
* @param string $sql * @param string $sql
* @param array|null $params * @param array|null $params
@@ -171,18 +141,6 @@ class Database
return $this->query($sql, $params)->fetchAll(); return $this->query($sql, $params)->fetchAll();
} }
/**
* @param string $sql
* @param array|null $params
* @param int $column
* @return mixed
*/
public function fetchColumn($sql, $params = null, $column = 0)
{
$stmt = $this->query($sql, $params);
return $stmt->fetchColumn($column);
}
/** /**
* @param string $sql * @param string $sql
* @param array|null $params * @param array|null $params
@@ -195,16 +153,6 @@ class Database
return $stmt->fetchColumn($column); return $stmt->fetchColumn($column);
} }
/**
* @param int $page
* @param int $per_page
* @return int
*/
public function getOffset($page, $per_page)
{
return $page * $per_page - $per_page;
}
/** /**
* @param int $page * @param int $page
* @param int $per_page * @param int $per_page
@@ -224,17 +172,6 @@ class Database
return $this->driver->quote($str); return $this->driver->quote($str);
} }
/**
* @param array $arr
* @return array
*/
public function buildName($arr)
{
return array_map(function ($item) {
return '"' . $item . '"';
}, $arr);
}
/** /**
* @param array $arr * @param array $arr
* @return array * @return array
-27
View File
@@ -1,27 +0,0 @@
<?php
namespace Nightmare\Database;
use ArrayObject;
class Row extends ArrayObject
{
/**
* @param string $name
* @return mixed
*/
public function __get($name)
{
return $this[$name];
}
/**
* @param string $name
* @param mixed $val
* @return void
*/
public function __set($name, $val)
{
$this[$name] = $val;
}
}
-14
View File
@@ -1,14 +0,0 @@
<?php
namespace Nightmare\Database;
use PDOStatement;
use PDO;
class Statement extends PDOStatement
{
protected function __construct()
{
$this->setFetchMode(PDO::FETCH_CLASS, Row::class);
}
}