db = new \PDO($dsn, $user, $password, [ \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION, \PDO::ATTR_STRINGIFY_FETCHES => true, ]); } catch (\PDOException $e) { $msg = $e->getMessage(); $code = (int) substr($msg, 17, 4); $msg = substr($msg, 23); [$excClass, $excMsg, $excData] = $this->buildConnectionException($code, $msg); throw new $excClass($excMsg, $excData); } } public function __destruct() { unset($this->db); } /** @codeCoverageIgnore */ public static function create(): \JKingWeb\Arsse\Db\Driver { if (self::requirementsMet()) { return new self; } elseif (Driver::requirementsMet()) { return new Driver; } else { throw new Exception("extMissing", self::driverName()); } } public function prepareArray(string $query, array $paramTypes): \JKingWeb\Arsse\Db\Statement { return new PDOStatement($this->db, $query, $paramTypes); } public static function driverName(): string { return Arsse::$lang->msg("Driver.Db.MySQLPDO.Name"); } }