为了账号安全,请及时绑定邮箱和手机立即绑定

Connector.php

标签:
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

}

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消