namespace xxxx\db;

use PDO;
use PDOException;

/**

  • 数据库类
    */

class Db
{

private static $pdo=null;
public static function pdo(){
    if(self::$pdo!==null){
        return self::$pdo;
    }
    define('DB_TYPE', 'kdb');
    define('DB_PARAMS', [
        // 'search_path'=>DB_NAME,
        ]);
    
    try {
        $dsn = sprintf('%s:host=%s;dbname=%s;port=%s;',DB_TYPE,DB_HOST,DB_NAME,DB_HOSTPORT);
        if(DB_CHARSET){
            if(DB_TYPE=='kdb'){
                $dsn .= 'options=--client_encoding='.DB_CHARSET.';';
            }else{
                $dsn .= 'charset='.DB_CHARSET.';';
            }
        }
        if(DB_PARAMS){
            if(DB_TYPE=='kdb'){
                $dsn .= 'options=';
                foreach (DB_PARAMS as $key => $value) {
                    $dsn .= '--'.$key.'='.$value.',';
                }
                $dsn=rtrim($dsn, ',');
            }else{
                foreach (DB_PARAMS as $key => $value) {
                    $dsn .= $key . '=' . $value.';';
                }
            }
        }
        $option =[
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            // PDO::ATTR_EMULATE_PREPARES => false,
            // PDO::ATTR_STRINGIFY_FETCHES => false,
        ];
        return self::$pdo = new PDO( $dsn ,DB_USER, DB_PASS, $option);

    } catch (PDOException $e) {
        echo 'Connection Failed: ' . $e->getMessage();
    }
}

}

标签: none

添加新评论