IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Connection à plusieur base de donnés


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2011
    Messages : 44
    Points : 19
    Points
    19
    Par défaut Connection à plusieur base de donnés
    Salut à tous,

    Voila j'ai un problème assez gênant et je c'est pas comment m'y prendre, je fait un site mais avec 5 BDDs sur le meme HOST,

    Donc ma déjà dit :

    Tu rassemble tes tables dans une même base de données et tu fais comme tout le monde.
    Donc directement NON impossible pour certaines raison non importantes

    Donc voici mon script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    <?php
     
    class Config {
     
    	protected $MySQLUser    		= "root";               // MySQL Username
            protected $MySQLPassword  		= "";             		// MySQL Password
            protected $MySQLHost    		= "127.0.0.1";          // MySQL Host IP-Address or Domainname
            protected $MySQLPort    		= "3306";               // MySQL Port option
    	protected $MySQLDBChar    		= "characters";         // MySQL Database Character
    	protected $MySQLDBMaNGOS    	= "mangos";         	// MySQL Database Character
    	protected $MySQLDBrealmd    	= "realmd";         	// MySQL Database Character
    	protected $MySQLDBScriptDev2    = "scriptdev2";         // MySQL Database Character
    	protected $MySQLDBPandoreWeb    = "pandoreweb";         // MySQL Database Character
    	protected $MySQLConnection;                       		// MySQL
     
    	public function __construct (){
     
            return $this->MySQLConnect();
     
        }
     
    	public function MySQLConnect (){
     
           $this->MySQLConnection = mysql_connect($this->MySQLHost.":".$this->MySQLPort, $this->MySQLUser, $this->MySQLPassword) or die("Database Error: ".mysql_errno()." : ".mysql_error());
     
        }
     
    	public function MySQLDBCharacters () {
     
    		$this->MySQLCharacters = mysql_select_db($this->MySQLDBChar) or die("Database Error: ".mysql_errno()." : ".mysql_error());
     
    	}
     
    	public function MySQLDBMangos () {
     
    		$this->MySQLMangos = mysql_select_db($this->MySQLDBMaNGOS) or die("Database Error: ".mysql_errno()." : ".mysql_error());
     
    	}
     
    	public function MySQLDBRealmd () {
     
    		$this->MySQLRealmd = mysql_select_db($this->MySQLDBrealmd) or die("Database Error: ".mysql_errno()." : ".mysql_error());
     
    	}
     
    	public function MySQLDBScriptDev2 () {
     
    		$this->MySQLScriptDev2 = mysql_select_db($this->MySQLDBScriptDev2) or die("Database Error: ".mysql_errno()." : ".mysql_error());
     
    	}
     
    	public function MySQLDBPandoreWeb () {
     
    		$this->MySQLPandoreWeb = mysql_select_db($this->MySQLDBPandoreWeb) or die("Database Error: ".mysql_errno()." : ".mysql_error());
     
    	}
     
    	public function MySQLClose () {
     
    		return mysql_close($this -> MySQLConnect()); 
     
    	}
     
     
    }
     
    $MySQL = new Config;
    $MySQL -> MySQLConnect();
    $MySQL -> MySQLDBCharacters();
    $MySQL -> MySQLDBMangos();
    $MySQL -> MySQLDBRealmd();
    $MySQL -> MySQLDBScriptDev2();
    $MySQL -> MySQLDBPandoreWeb();
     
    ?>
    ET :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
     
    <?php
     
    class News extends Config {
     
    	public function __construct () {
     
    		Config :: MySQLDBPandoreWeb();
     
        }
     
    	public function Pagination($table,$order) {
     
    		$this->MessagesParPage = 10;
     
    		$this->RetourTotalNews = mysql_query('SELECT COUNT(*) AS total FROM '.$table.'', $this->MySQLPandoreWeb) or die("".mysql_error()." Database Error: ".mysql_errno()."");
    		$this->DonnesTotalNews = mysql_fetch_assoc($this->RetourTotalNews);
    		$this->RetourTotal = $this->DonnesTotalNews['total'];
     
    		$this->NombreDePages = ceil($this->RetourTotal / $this->MessagesParPage);
     
    		if(isset($_GET['Pages'])) {
     
    			$this->PageActuelle = intval($_GET['Pages']);
     
         		if($this->PageActuelle > $this->NombreDePages)  {
     
    		 		$this->PageActuelle = $this->NombreDePages;
     
    			}
     
    		}
    		else {
     
    	 		$this->PageActuelle = 1;     
     
    		}
     
    		$this->PremiereEntree = ($this->PageActuelle - 1) * $this->MessagesParPage; 
     
    		$this->RetourFinal = mysql_query('SELECT * FROM '.$table.' ORDER BY '.$order.' DESC LIMIT '.$this->PremiereEntree.', '.$this->MessagesParPage.'') or die("Database Error: ".mysql_errno()." : ".mysql_error());
     
     
    	}
     
    	public function Affichage() {
     
    		News::Pagination('news','dates');
     
    		while ($this->ResultatForumPostReponse = mysql_fetch_assoc($this->RetourFinal)) {	
     
    			echo ('<div id="news">
                        <div id="newsheader"><div id="newsheadertexte">'.$this->ResultatForumPostReponse['titre'].'</div></div>');
    			echo ('<div id="newsback">
                                <div id="newsbackheader">
                                </div>
                                <div id="newsbackbody">
                                	<div id="texte">'.$this->ResultatForumPostReponse['message'].'
    								 </div>
                                </div>
                                <div id="newsbackfooter">
                                </div>
                                <br />
                                <div id="newsbackheader">
                                </div>
                                <div id="newsbackbody">
                                	<div id="texte">Par '.$this->ResultatForumPostReponse['auteur'].' le '.$this->ResultatForumPostReponse['dates'].'');
    								if ($this->ResultatForumPostReponse['maj'] == 1) { 
     
    									echo ('<div id="right">Mise à jour par '.$this->ResultatForumPostReponse['auteurmaj'].'  le '.$this->ResultatForumPostReponse['datesmaj'].'</div>');
     
    								} 
    								else {
     
     
     
    								}
     
    								echo ('
    								</div>
                                </div>
                                <div id="newsbackfooter">
                                </div>
                            </div>
                        <div id="newsbas"></div>
                    </div>');
     
    		}
    		echo ('<div id="news"><div id="newsheader"><div id="newsheadertexte"><div id="centre">');
     
    		$this->PrecedanteVariable = $this->PageActuelle - 1; // numéro de la page précédente
    		$this->SuivanteVariable = $this->PageActuelle + 1; // numéro de la page suivante
     
    		if ($this->PageActuelle > 1) {
     
    			$this->Precedant = '<a href="?Page=Accueil&Pages='.$this->PrecedanteVariable.'">Précédante</a>';
     
    		}
    		else {
     
    			$this->Precedant = '';
     
    		}
     
    		echo ('<div id="left">'.$this->Precedant.'</div> Pages ');
    		for($this->ip = 1; $this -> ip <= $this->NombreDePages; $this->ip ++) {
     
         		if($this->ip == $this->PageActuelle) {
     
    				echo ' ['.$this->ip.']'; 
     
    	 		}	
         		else {
     
    				echo (' <a href="?Page=Accueil&Pages='.$this->ip.'">'.$this->ip.'</a>');
     
    	 		}
     
    		}
     
    		echo (' sur ['.$this->NombreDePages.']');
     
    		if ($this->PageActuelle < $this->NombreDePages) {
     
    			$this->Suivant = '<a href="?Page=Accueil&Pages='.$this->SuivanteVariable.'">Suivante</a>';
     
    		}
    		else {
     
    			$this->Suivant = '';
     
    		}
     
    		echo ('<div id="right">'.$this->Suivant.'</div>');
     
    		echo ('</div></div></div><div id="newsbas"></div></div>');
     
    	}
     
    }
     
    ?>
    Donc ca me renvoie

    Warning: mysql_query() expects parameter 2 to be resource, boolean given in E:\xamppnouveaux\htdocs\pandoreweb\Fonctions\News\News.class.php on line 15
    Et si je fait :

    $MySQL->MySQLPandoreWeb
    Il me dit que $MySQL n'existe pas alors que si !!!

    Voila je suis perdu, et j’espère avoir postez dans la bonne sections ^^

    Merci d'avoir lut

  2. #2
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 563
    Points : 2 390
    Points
    2 390
    Par défaut
    Qu'est ce que tu veux dire par plusieurs base ?

    Plusieurs bases de données sur des serveurs différents ?

    Mais à priori vu que t'es sur le même host, ça doit être :
    Plusieurs bases créées dans une même base de données ?

    Si c'est le 2eme cas, tu peux utiliser mysql_select_db() pour changer ta base par défaut quand tu en a besoin, ou alors sans utiliser cette fonction, tu peux acceder aux tables de plusieurs bases en une seule requête en préfixant dans ta requete :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT mabase1.table1.champ1, mabase2.table2.champ2 ...
    Zend Certified PHP Engineer

    « Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2011
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par Seb33300 Voir le message
    Qu'est ce que tu veux dire par plusieurs base ?

    Plusieurs bases de données sur des serveurs différents ?

    Mais à priori vu que t'es sur le même host, ça doit être :
    Plusieurs bases créées dans une même base de données ?

    Si c'est le 2eme cas, tu peux utiliser mysql_select_db() pour changer ta base par défaut quand tu en a besoin, ou alors sans utiliser cette fonction, tu peux acceder aux tables de plusieurs bases en une seule requête en préfixant dans ta requete :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT mabase1.table1.champ1, mabase2.table2.champ2 ...
    Je m'explique mal on me le dit toujours ^^

    En claire heberger en local donc 127.0.0.1 il y a 5 bases donc si on regarde le code mangos/characters/realmd/ect... donc toute c'ets base sont sur la meme base de donnée donc tous sur localhost(127.0.0.1)

    Sinon pas possible de faire autrement?

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    y'a des choses qui ne vont pas,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public function __construct (){
        return $this->MySQLConnect();
    }
    tu peux pas faire ça, __construct retourne l’instance


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Config :: MySQLDBPandoreWeb();
    tu appels statiquement une méthode non statique


    ne correspond pas a grand chose


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    or die("Database Error: ".mysql_errno()." : ".mysql_error());
    pas de or die pour débugger (de plus c'est exit pas die) utilise le trace_mode


    et je te conseil vivement de passé a Mysqli ou PDO
    si tu veux utilisé des configs regarde vers le pattern Registry

  5. #5
    Membre actif Avatar de firehist
    Homme Profil pro
    Intégrateur Web Freelance
    Inscrit en
    Février 2008
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur Web Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 151
    Points : 214
    Points
    214
    Par défaut
    D'accord avec les points souligné par stealth35.

    Mais pour ce qui est de ta question concernant le changement de base, si tes bases sont sur le même serveur, comme le dit Seb33300, il te suffit de faire le bon mysql_select_db avant d’exécuter une requête.
    Dans ce cas, une seule connection à la base de donnée suffit.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2011
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    Oui mais imaginons la page à 3script et utilise 4 base de donné diférente et dans les 4 il y à 27 tables a utiliser, donc je vais faire mysql_select_db() a chaque jscript car en moyen 1script interroge 2 base de donné défiérente et environs 7 à 10 table spar script, de plus dans mon code, pour je les fait statiquement une méthode non statique car si vous voyez j'ai bien mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    $MySQL = new Config;
    $MySQL -> MySQLConnect();
    $MySQL -> MySQLDBCharacters();
    $MySQL -> MySQLDBMangos();
    $MySQL -> MySQLDBRealmd();
    $MySQL -> MySQLDBScriptDev2();
    $MySQL -> MySQLDBPandoreWeb();
     
    ?>
    Mais quand je la déclare par la variable $MySQL il me dit qu'el exsite pas Oo

  7. #7
    Membre actif Avatar de firehist
    Homme Profil pro
    Intégrateur Web Freelance
    Inscrit en
    Février 2008
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur Web Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 151
    Points : 214
    Points
    214
    Par défaut
    As-tu corrigé les points que stealth a remontés?

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2011
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2011
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    Pour le "__construct qui retourne l’instance" et le or die oui, si non le reste je peux pas je viens de l'écrire

Discussions similaires

  1. [SQL-Server] Se connecter à plusieurs base de données
    Par ass_dev dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 06/06/2013, 18h20
  2. Connection ado avec plusieurs bases de données
    Par sihammaster dans le forum VB.NET
    Réponses: 11
    Dernier message: 01/03/2010, 16h07
  3. Connection à une base de données
    Par rodri dans le forum Bases de données
    Réponses: 3
    Dernier message: 28/07/2004, 15h05
  4. Connection à une base de données
    Par rodri dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/07/2004, 13h03
  5. triggers sur plusieurs bases de données
    Par Shabata dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/05/2004, 10h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo