handler = new PDO( $this->dns(), $this->username, $this->password, $this->getOptions() ); $this->handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $this->handler->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $this->handler->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $this->handler->exec('SET SESSION sql_mode = "TRADITIONAL"'); } /** * @return string */ private function dns() { if ($this->dns) { return $this->dns; } $this->socketHandler(); return $this->dns = "{$this->driver}:host={$this->host};port={$this->port}';dbname={$this->database}"; } /** * @return array */ private function getOptions() { $options = [ PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION, ]; if (defined('DB_CHARSET')) { $options[PDO::MYSQL_ATTR_INIT_COMMAND] = 'set names ' . DB_CHARSET; } return $options; } }