php切换本地还是远程mysql代码(pdo)

<?php
define("ENVIRONMENT","local");
class DatabaseConfig {
    private static $config = [
        'local' => [
            'host' => '127.0.0.1',
            'dbname' => 'cg_ad_local',
            'username' => 'root',
            'password' => 'root',
            'charset' => 'utf8mb4'
        ],
        'production' => [
            'host' => 'sql313.aaa.com',
            'dbname' => 'aaa',
            'username' => 'aaa',
            'password' => 'aaa',
            'charset' => 'utf8mb4'
        ]
    ];
    
    /**
     * 获取当前环境配置
     * @return string 'local' 或 'production'
     */
    public static function getEnvironment() {
        // 检查是否定义了环境常量
        if (defined('ENVIRONMENT')) {
            return ENVIRONMENT;
        }
        
        // 根据主机名判断环境
        $host = $_SERVER['HTTP_HOST'] ?? '';
        if (strpos($host, 'localhost') !== false || 
            strpos($host, '127.0.0.1') !== false ||
            strpos($host, 'local') !== false) {
            return 'local';
        }
        
        // 默认为生产环境
        return 'production';
    }
    
    /**
     * 获取数据库配置
     * @param string $environment 环境 (local|production)
     * @return array 数据库配置
     */
    public static function getConfig($environment = null) {
        if ($environment === null) {
            $environment = self::getEnvironment();
        }
        
        return self::$config[$environment] ?? self::$config['production'];
    }
    
    /**
     * 创建数据库连接
     * @param string $environment 环境 (local|production)
     * @return PDO 数据库连接对象
     */
    public static function getConnection($environment = null) {
        $config = self::getConfig($environment);
        
        try {
            $dsn = "mysql:host={$config['host']};dbname={$config['dbname']};charset={$config['charset']}";
            $pdo = new PDO($dsn, $config['username'], $config['password']);
            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
            return $pdo;
        } catch (PDOException $e) {
            throw new Exception("数据库连接失败: " . $e->getMessage());
        }
    }
}
?>

 

posted on 2025-08-19 10:07  小沙盒工作室  阅读(11)  评论(1)    收藏  举报