From d9bc65418f047a6d1eedbfad9a73b3ca977e6d57 Mon Sep 17 00:00:00 2001 From: me Date: Sat, 5 Sep 2026 13:57:06 +0700 Subject: [PATCH] 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 --- src/Database/Database.php | 41 +++++++++++++++++++++----------------- src/Database/Row.php | 27 ------------------------- src/Database/Statement.php | 14 ------------- 3 files changed, 23 insertions(+), 59 deletions(-) delete mode 100644 src/Database/Row.php delete mode 100644 src/Database/Statement.php diff --git a/src/Database/Database.php b/src/Database/Database.php index 78034ea..89ee939 100644 --- a/src/Database/Database.php +++ b/src/Database/Database.php @@ -12,31 +12,36 @@ class Database */ 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, $username = null, $password = null, $options = null ) { - if ($dsn instanceof PDO) { - $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) - ); - } + $pdo = new PDO($dsn, $username, $password, (array) $options); - $this->driver->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - $this->driver->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); - $this->driver->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_CLASS); - $this->driver->setAttribute(PDO::ATTR_STATEMENT_CLASS, [Statement::class]); + $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); + $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); - $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() diff --git a/src/Database/Row.php b/src/Database/Row.php deleted file mode 100644 index 48f0fb5..0000000 --- a/src/Database/Row.php +++ /dev/null @@ -1,27 +0,0 @@ -setFetchMode(PDO::FETCH_CLASS, Row::class); - } -}