J'ai un ensemble de fonctions qui gèrent la connexion db. Je veux ajouter une autre connexion ici afin que je puisse accéder à une base de données différente en même temps que celle en cours. Aucune suggestion?Ajout d'une autre connexion db à la fonction
La raison pour laquelle je cherche une solution est parce que le script que j'utilise a des requêtes très compliquées et je voudrais pouvoir simplement ajouter le nom de base de données devant lui, au lieu de réécrire les nombreux requêtes compliquées.
Voici les fonctions qui se connectent à la base de données:
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);
}
Voici un exemple de requête que je ne veux pas réécrire. Je ne dois connecter au tableau Profiles
sur une base de données séparée:
$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'];
Si c'est à l'intérieur d'une classe (puisque c'est la seule façon de faire '$ this'), pourquoi utilisez-vous toujours des variables globales (par opposition aux variables membres ou aux variables de classes statiques)? – ircmaxell
Ceux-ci sont utilisés dans une zone différente du script. Je ne l'ai pas écrit, j'essaie juste d'intégrer deux sites différents en utilisant la même table 'Profiles'. – tmartin314