php链接数据库

/**
 * 连接数据库。
 *
 * @param  string  $dbOption  数据库配置项。
 * @return void
 */
final public function connection($dbOption = '')
{
    if (strlen($dbOption) > 0) {
        $this->dbOption = $dbOption;
    }
    $registryName = "mysql_{$this->dbOption}";
    // [1] 传统初始化MySQL方式。
    $config = App::getDbConfig();
    if (!isset($config[$dbOption])) {
        throw new DbException("MySQL 配置:{$dbOption} 未设置");
    }
    $config   = $config[$dbOption];
    $host     = $config['host'];
    $port     = $config['port'];
    $username = $config['user'];
    $password = $config['pwd'];
    $charset  = $config['charset'];
    $dbname   = $config['dbname'];
    $pconnect = $config['pconnect'];
    $dsn      = "mysql:dbname={$dbname};host={$host};port={$port}";
    $dbh      = new \PDO($dsn, $username, $password, [\PDO::ATTR_PERSISTENT => $pconnect]);
    // MySQL操作出错,抛出异常。
    $dbh->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
    $dbh->setAttribute(\PDO::ATTR_ORACLE_NULLS, \PDO::NULL_NATURAL);
    $dbh->setAttribute(\PDO::ATTR_STRINGIFY_FETCHES, FALSE);
    $dbh->setAttribute(\PDO::ATTR_EMULATE_PREPARES, FALSE);
    // 以关联数组返回查询结果。
    $dbh->setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_ASSOC);
    $dbh->query("SET NAMES {$charset}");
    self::$connectedIdent[$registryName] = $dbOption; // 之所以以连接标识做键,是避免多次连接导致持续的增加。
    Registry::set($registryName, $dbh);
}

配置如下

; MySQL 配置
mysql.default.host     = 127.0.0.1
mysql.default.port     = 3306
mysql.default.user     = xxx
mysql.default.pwd      = xxx
mysql.default.dbname   = xxx
mysql.default.charset  = utf8
mysql.default.pconnect = false
/**
 * 构造方法。
 *
 * @param  string  $dbOption  数据库配置项。
 * @return void
 */
public function __construct($dbOption = '')
{
    if (strlen($dbOption) > 0) {
        $this->dbOption = $dbOption;
        $this->changeDb($this->dbOption);
    }
}
/**
 * 切换数据库连接。
 *
 * @param  string  $dbOption  数据库配置项。
 * @return void
 */
final public function changeDb($dbOption)
{
    $registryName = "mysql_{$dbOption}";
    if (Registry::has($registryName) === false) {
        $this->connection($dbOption);
    }
    $this->dbConnection = Registry::get($registryName);
}

初始化的时候,自动连接数据库。
然后就可以进行各种操作了。

posted @ 2020-01-03 16:39  TBHacker  阅读(235)  评论(0编辑  收藏  举报