phpリンクデータベース

2493 ワード

/**
 *      。
 *
 * @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);
}

初期化すると、自動的にデータベースに接続されます.それからいろいろな操作ができます.