Işlevine başka db bağlantısı ekleme

0 Cevap php

Ben db bağlantısı işlemek fonksiyonları bir dizi var. Ben güncel olarak aynı anda farklı bir veritabanına erişebilir ben burada başka bir bağlantı eklemek istiyorum. Herhangi Öneriler?

Ben kullanıyorum komut dosyası çok karmaşık sorgular vardır ve ben sadece onun yerine birçok karmaşık sorguları yeniden yazma, önünde veritabanı adını eklemeniz mümkün olmak istiyorum, çünkü ben bir çözüm arıyorum nedenidir.

Burada veritabanına bağlanmak işlevleri şunlardır:

function db(){

    $this->host = DATABASE_HOST;
    $this->port = DATABASE_PORT;
    $this->socket = DATABASE_SOCK;
    $this->dbname = DATABASE_NAME;
    $this->user = DATABASE_USER;
    $this->password = DATABASE_PASS;
    $this->current_arr_type = MYSQL_ASSOC;

    //  connect to db automatically
    if (empty($GLOBALS['bx_db_link'])) {
        $this->connect();
        $GLOBALS['gl_db_cache'] = array();
        $GLOBALS['bx_db_param'] = array();
    }
    else
        $this->link = $GLOBALS['bx_db_link'];

    if(empty($GLOBALS['bx_db_param']))
        $GLOBALS['bx_db_param'] = new BxDolParams($this);

    $this->oParams = &$GLOBALS['bx_db_param'];
}

/**
 * connect to database with appointed parameters
 */
function connect()
{
    $full_host = $this->host;
    $full_host .= $this->port ? ':'.$this->port : '';
    $full_host .= $this->socket ? ':'.$this->socket : '';

    $this->link = @mysql_pconnect($full_host, $this->user, $this->password);
    if (!$this->link)
        $this->error('Database connect failed', true);

    if (!$this->select_db())
        $this->error('Database select failed', true);

    $this->res("SET NAMES 'utf8'");
    $this->res("SET sql_mode = ''");

    $GLOBALS['bx_db_link'] = $this->link;
}

function select_db()
{
    return @mysql_select_db($this->dbname, $this->link) or $this->error('Cannot complete query (select_db)');
}

/**
 * close mysql connection
 */
function close()
{
    mysql_close($this->link);
}   

İşte ben yeniden yazmak istemiyorum bir örnek Query. Ben sadece ayrı bir veritabanı üzerinde Profiles Tablo bağlamanız gerekir:

$sQuery = "
    SELECT
        `tp`.`ID` as `id`,
        `tp`.`NickName` AS `username`,
        `tp`.`Headline` AS `headline`,
        `tp`.`Sex` AS `sex`,
        `tp`.`DateOfBirth` AS `date_of_birth`,
        `tp`.`Country` AS `country`,
        `tp`.`City` AS `city`,
        `tp`.`DescriptionMe` AS `description`,
        `tp`.`Email` AS `email`,
        DATE_FORMAT(`tp`.`DateReg`,  '" . $sDateFormat . "' ) AS `registration`,
        DATE_FORMAT(`tp`.`DateLastLogin`,  '" . $sDateFormat . "' ) AS `last_login`,
        `tp`.`Status` AS `status`,
        IF(`tbl`.`Time`='0' OR DATE_ADD(`tbl`.`DateTime`, INTERVAL `tbl`.`Time` HOUR)>NOW(), 1, 0) AS `banned`, 
        `tl`.`ID` AS `ml_id`, 
        IF(ISNULL(`tl`.`Name`),'', `tl`.`Name`) AS `ml_name`
        " . $sSelectClause . "
    FROM `Profiles` AS `tp` 
    LEFT JOIN `sys_admin_ban_list` AS `tbl` ON `tp`.`ID`=`tbl`.`ProfID`
    LEFT JOIN `sys_acl_levels_members` AS `tlm` ON `tp`.`ID`=`tlm`.`IDMember` AND `tlm`.`DateStarts` < NOW() AND (`tlm`.`DateExpires`>NOW() || ISNULL(`tlm`.`DateExpires`))  
    LEFT JOIN `sys_acl_levels` AS `tl` ON `tlm`.`IDLevel`=`tl`.`ID` 
    " . $sJoinClause . "
    WHERE
        1 AND (`tp`.`Couple`=0 OR `tp`.`Couple`>`tp`.`ID`)" . $sWhereClause . "
    " . $sGroupClause . "
    ORDER BY `tp`.`" . $aParams['view_order'] . "` " . $aParams['view_order_way'] . "
    LIMIT " . $aParams['view_start'] . ", " . $aParams['view_per_page'];

0 Cevap