SAE和BAE以及阿里云的mysql数据库连接串


先说一下通用的连接串吧:
private function getMysqlConnALIYUN(){
    $this->link = @mysql_connect($this->dbHost.':'.$this->dbPort, $this->dbUser, $this->dbPass ) 
        or die ( "class_mysql Connect ALY Error!!!");
    $conn = mysql_select_db($this->dbName, $this->link) or die("class_mysql SELECT Aliyun db error!!!");
    mysql_query("set names '$this->dbCode'");
}

接着,是新浪云sae的连接串,这个比较特殊:

private function getMysqlConnSAE() {
    //require_once 'class.MysqlSae.php';
    //self::$mInstance = new MysqlSae();//new MysqlSae();
    //return true;

    $this->link =  mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS) 
    or die ( "Connect KCSAEServer Error!!!". mysql_error());

    $conn = mysql_select_db(SAE_MYSQL_DB,$this->link) 
        or die("Select KCSAEDatabase Failed!!!" . mysql_error($this->link));
    mysql_query("set names '$this->dbCode'");
}

最后,百度的连接串:

private function getMysqlConnBAE() {
    /*接着调用mysql_connect()连接服务器*/
    $this->link = @mysql_connect ("{$this->dbHost}:{$this->dbPort}", $this->dbUser, $this->dbPass, true);
    if (!$this->link) {
        die("Connect KCBAEServer Failed: " . mysql_error());
    }
    /*连接成功后立即调用mysql_select_db()选中需要连接的数据库*/
    if (! mysql_select_db($this->dbName, $this->link)) {
        die("Select KCBAEDatabase Failed: " . mysql_error($this->link));
    }

    /*至此连接已完全建立,就可对当前数据库进行相应的操作了*/
    /*!!!注意,无法再通过本次连接调用mysql_select_db来切换到其它数据库了!!!*/
    /* 需要再连接其它数据库,请再使用mysql_connect+mysql_select_db启动另一个连接*/

    /**
    * 接下来就可以使用其它标准php mysql函数操作进行数据库操作
    */

    /*显式关闭连接,非必须mysql_close($this->link);*/

}

为了在不同的环境下不用修改配置文件,能够智能识别连接串,我的配置文件是这样子的(数据库密码你懂的):

    if ($_SERVER['SERVER_NAME'] == 'www.dbname.com'){
        //阿里云的配置,从ECS数据库链接
        $dbArray = array ('type' => 'ALIYUN', 
             'host' => 'localhost', 
             'port' => '3306', 
             'user' => 'wwb', 
             'pass' => 'wsVGB_ecs', 
             'name' => 'dbname', 
             'code' => 'utf8'
        );
        
    }elseif(defined('SAE_MYSQL_USER') && SAE_MYSQL_USER!=''){
        //新浪SAE的配置,从环境定义的静态常量里取出数据库连接需要的参数

        $dbArray = array('type'=>'SAE',
             'host'=>SAE_MYSQL_HOST_M,
             'port'=>SAE_MYSQL_PORT,
             'user'=>SAE_MYSQL_USER,
             'pass'=>SAE_MYSQL_PASS,
             'name'=>SAE_MYSQL_DB,
             'code'=>'UTF8'
        );

    }elseif(function_exists('getenv') && getenv('HTTP_BAE_ENV_AK')!=''){
        //百度BAE的配置,从环境变量里取出数据库连接需要的参数
        $dbArray = array('type'=>'BAE',
             'host'=>getenv('HTTP_BAE_ENV_ADDR_SQL_IP'),
             'port'=>getenv('HTTP_BAE_ENV_ADDR_SQL_PORT'),
             'user'=>getenv('HTTP_BAE_ENV_AK'),
             'pass'=>getenv('HTTP_BAE_ENV_SK'),
             'name'=>'hAEVyBEuUUIFuQZz',
             'code'=>'utf8'
         );
         
    }else{
        //本地测试的配置
        $dbArray = array (
            'type' => 'LOCAL', 
            'host' => 'localhost', 
            'port' => '0', 
            'user' => 'website', 
            'pass' => 'website123', 
            'name' => 'dbname', 
            'code' => 'utf8' 
        );
    }

这个通用类已经封装好,大概就这样子了,这个封装类经过了好多次优化的了。


原文链接:https://blog.yongit.com/note/83028.html