<?php namespace Illuminate\Database\Connectors; use PDO; use Exception; use Illuminate\Support\Arr; use Illuminate\Database\DetectsLostConnections; // that was system class class Connector {// a connector use DetectsLostConnections;// a trait like detects lost connections /** * The default PDO connection options. * * @var array */ protected $options = [ PDO::ATTR_CASE => PDO::CASE_NATURAL, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL, PDO::ATTR_STRINGIFY_FETCHES => false, PDO::ATTR_EMULATE_PREPARES => false, ];// set all this pdo options /** * Get the PDO options based on the configuration. * * @param array $config * @return array */ public function getOptions(array $config) { $options = Arr::get($config, ‘options‘, []);// get configs options default is empty array return array_diff_key($this->options, $options) + $options;// set the new option }// get options /** * Create a new PDO connection. * * @param string $dsn * @param array $config * @param array $options * @return \PDO */ public function createConnection($dsn, array $config, array $options) {// create a new pdo connection. $username = Arr::get($config, ‘username‘);//username $password = Arr::get($config, ‘password‘);// password try { $pdo = new PDO($dsn, $username, $password, $options); } catch (Exception $e) {// try connection this function $pdo = $this->tryAgainIfCausedByLostConnection( $e, $dsn, $username, $password, $options// throw exception ); } return $pdo;// if ok,just return this pdo function } /** * Get the default PDO connection options. * * @return array */ public function getDefaultOptions() { return $this->options; }// get the default Options by this class /** * Set the default PDO connection options. * * @param array $options * @return void */ public function setDefaultOptions(array $options) { $this->options = $options; }// can set the default options in this way /** * Handle a exception that occurred during connect execution. * * @param \Exception $e * @param string $dsn * @param string $username * @param string $password * @param array $options * @return \PDO * * @throws \Exception */ protected function tryAgainIfCausedByLostConnection(Exception $e, $dsn, $username, $password, $options) {//Handle a exception that occurred during connect execution if ($this->causedByLostConnection($e)) { return new PDO($dsn, $username, $password, $options); } throw $e; }// throw $e }
时间: 2024-10-07 17:04:46