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 :

Équivalent de mysql_select_db [PDO]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 39
    Points : 29
    Points
    29
    Par défaut Équivalent de mysql_select_db
    bonjour,

    J'ai repris un site qui utilise PDO dans la gestion de la base de donnée
    le probleme c'est que j'ai besoin d'acceder à 2 bases sur la même page.

    je cherche donc un equivalent de mysql_select_db mais je le ne le trouve pas.

    lorsque je fais 2 pointeur vers 2 base différents ca me renvoie une erreur.
    lorsque j'essaie de supprimer la 1ere connexion et ouvrir une 2eme ca ne fonctionne pas non plus

    lorsque je commentente une partie ou l'autre elle fonctionne chacune, c'est vraiment lorsque je mets les 2 que ca ne fonctionne pas


    l'erreur indiqué est:
    Fatal error: Call to a member function execute() on a non-object in C:\server\www\dev\modules\admin\vacation.php on line 31
    la ligne 31 correspond a l'execute d'une requete sur la 2eme base


    voici le code
    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
     
    <?php
     
    class PDO2 extends PDO {
     
    	private static $_instance;
     
    	/* Constructeur : héritage public obligatoire par héritage de PDO */
    	public function __construct( ) {
     
    	}
    	// End of PDO2::__construct() */
     
    	/* Singleton */
    	public static function getInstance() {
     
    		if (!isset(self::$_instance)) {
     
    			try {
     
    				self::$_instance = new PDO(SQL_DSN, SQL_USERNAME, SQL_PASSWORD);
     
    			} catch (PDOException $e) {
     
    				echo $e;
    			}
    		} 
    		return self::$_instance; 
    	}
     
    	public static function getInstanceGesha() {
     
    		if (!isset(self::$_instance)) {
     
    			try {
     
    				self::$_instance = new PDO(SQL_DSN_GESHA, SQL_USERNAME, SQL_PASSWORD);
     
    			} catch (PDOException $e) {
     
    				echo $e;
    			}
    		} 
    		return self::$_instance; 
    	}
    	// End of PDO2::getInstance() */
    }
     
    $idVac = array();
     
    $pdo= PDO2::getInstance();
    $sql = 'select * from vacation where dateGesha >= "'.date('Y-m-d').'";';
    echo $sql."<br />";
    $requete2 = $pdo->query($sql);
    $requete2->execute();
    while($result_vacation = $requete2->fetch(PDO::FETCH_ASSOC)){
    	$idVac[] = $result_vacation['idGesha'];
    	echo $result_vacation['idGesha']."<br />";
    }
    $requete2->closeCursor();
    $requete2=null;
    $pdo= null;
     
     
    $pdoG = PDO2::getInstanceGesha();
     
    $requete = $pdoG->query('select idGesha, numGesha, dateGesha, titre from gesha where vacation=\'1\' and dateGesha >= \''.date('Y-m-d').'\' order by dateGesha ');
    $requete->execute(); //c'est la ligne 31
    ?>

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Utiliser un singleton de PDO pour gérer l'accès à deux bases de données différentes, c'est pas un peu se tirer une balle dans le pied ?

    J'dis ça, j'dis rien.
    Pourfendeur de singletons en croisade

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 39
    Points : 29
    Points
    29
    Par défaut
    je ne connais pas bien PDO et je ne sais pas ce que c'est singleton.

    j'ai hérité de ce site, je ne suis pas responsable des choix de mon prédécesseur

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    La classe PDO2 telle qu'elle est présentée ne peut répondre à ton problème.

    Oublie ce truc et utilise PDO de manière naturelle, tu ne t'en porteras que mieux.

    Bon courage
    Pourfendeur de singletons en croisade

  5. #5
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Si les bases de données font partie du même serveur MySQL, il n'est pas utile de créer plusieurs instances de PDO, donc de modifier la classe pour ça.
    Suffit pour cela de le spécifier dans les requêtes.
    Exemple :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT base_1.table1.champ FROM base_1.table1
     
    SELECT base_2.table2.champ FROM base_2.table2
    A savoir que même avec les fonctions mysql_* il n'y pas obligation de spécifier à chaque fois la BDD à sélectionner avec mysql_select_db, suffit comme ci-dessus de nommer explicitement la Bdd dans la requête.

    Tout est une question si les Bdd sont sur le même serveur ou pas.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 39
    Points : 29
    Points
    29
    Par défaut
    je ne savait pas qu'on pouvait changer de base sans changer de pointeur.
    ça résout parfaitement mon problème.
    un grand merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. équivalent lien HTML
    Par Dra_Gun dans le forum Flash
    Réponses: 3
    Dernier message: 15/12/2003, 16h25
  2. Réponses: 4
    Dernier message: 21/09/2003, 15h50
  3. Réponses: 3
    Dernier message: 21/08/2003, 14h47
  4. [postgreSQL] équivalent de la function 'instr'
    Par Dra_Gun dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/01/2003, 16h09
  5. Équivalent du #IFDEF
    Par agh dans le forum Langage
    Réponses: 4
    Dernier message: 14/10/2002, 18h44

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