手记

Connector.php

<?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

}

0人推荐
随时随地看视频
慕课网APP