Comment faire un SELECT sur 2 bases ? [Mysql][PDO] - SQL/NoSQL - Programmation
Marsh Posté le 17-12-2008 à 15:26:32
http://fr.php.net/pdo
Et dans les commentaires :
Citation : It doesn't seem at this time that there's a practical solution (besides creating multiple PDO objects and therefore DB connections) to accessing and switching between multiple databases -- as with the mysql_select_db function. |
Marsh Posté le 17-12-2008 à 15:37:16
Ca ne me dérangerai pas de gérer plusieurs connexions (j'en ait déja une vers chaque base), mais je vois mal comment les utiliser .... (je suis une brèle en POO par ailleurs).
Actuellement, je fais ($dbh est ma 1ere connex, $dbh_vt la 2eme)
$sql="SELECT * FROM blabla WHERE truc=:truc";
$stmt=$dbh->prepare($sql);
$data=array(":truc'=>$machin);
$stmt->execute($data);
while ....
Je vois mal comment construire la requête pour qu'elle porte sur les 2 bases (même en utilisant 2 connexions)
Marsh Posté le 17-12-2008 à 15:38:33
attention : deux tables ou deux bases : c'est complètement différent
Marsh Posté le 17-12-2008 à 15:41:27
stadire qu'une seule requête sur deux bases c'est mauvais signe pour le design de ton truc, déjà ...
Marsh Posté le 17-12-2008 à 15:51:30
2 bases
Je me connecte en tant que client sur une base sur laquelle je retrouve l'emploi du temps de mes etudiants (et là, j'ai pas le choix, ca dépend du logiciel d'EDT).
En parallèle de ca, j'ai une autre base dans laquelle j'enregistre des absences (qui dépendent de séances que je trouve dans la base de l'EDT) ...
Marsh Posté le 17-12-2008 à 15:55:23
getget a écrit : 2 bases |
question con : pourquoi tu n'ajoutes pas tout simplement des tables dans la base existante, genre en les préfixant d'un truc spécifique?
Marsh Posté le 17-12-2008 à 16:06:09
J'ai pas acces en écriture
Marsh Posté le 17-12-2008 à 16:09:02
ça pue le piratage d'un accès sql ça.
J'ai bien peur qu'on ne soit pas censés aider, dans ce cas.
Marsh Posté le 17-12-2008 à 16:31:01
Aucun piratage, j'ai accès en lecture à une base, via un User spécifique, base qui est commune à tout l'IUT.
D'un autre coté, j'ai l'espace web de mon département, avec sa propre base (et un autre user), sur laquelle j'ai tous les droits.
Je ne peux pas faire mieux comme "preuve" que ca : (yaplus ), hébergé sur le site duquel je suis en train de m'occuper
Marsh Posté le 17-12-2008 à 16:31:44
Bon, c'est le même serveur mysql, au moins?
Marsh Posté le 17-12-2008 à 16:43:50
Yep, et j'ai déja 2 connexions vers les 2 bases (et individuellement, j'accède à chaque base sans soucis)
Marsh Posté le 17-12-2008 à 16:57:21
getget a écrit : Yep, et j'ai déja 2 connexions vers les 2 bases (et individuellement, j'accède à chaque base sans soucis) |
il faudrait utiliser le même utilisateur, je pense...et il y a une syntaxe pour faire ça, après, avec mysql - si je me souviens bien c'est un truc du genre :
select *
from base1.toto join base2.tata on toto.tata_id = tata.id
Marsh Posté le 17-12-2008 à 17:05:53
Ca y'a aucun soucis, avec mysql ou mysqli je sais faire (tu ouvres 2 connexions et "SELECT * FROM db1.Table1, db2.Table2 .." ), mais avec PDO, je vois pas comment faire
Marsh Posté le 17-12-2008 à 17:10:32
getget a écrit : Ca y'a aucun soucis, avec mysql ou mysqli je sais faire (tu ouvres 2 connexions et "SELECT * FROM db1.Table1, db2.Table2 .." ), mais avec PDO, je vois pas comment faire |
Pourquoi deux connections? Une seule devrait suffire, si c'est le même serveur.
Donc je vois pas pourquoi ça poserait problème avec PDO...?
Marsh Posté le 17-12-2008 à 17:15:55
Ben quand tu crées ta connection, tu dois selectionner une base non
Marsh Posté le 17-12-2008 à 17:17:03
selectionner une base avec mysql c'est juste choisir pour quelle base tu vas avoir un raccourci, ça t'empêche pas d'interroger les autres aussi si ton utilisateur a les droits, non?
Marsh Posté le 17-12-2008 à 17:20:25
Ouais mais moi j'ai 2 utilisateurs différents
Edith : même sur ma DB de test ou c'est le même user pour les 2 bases, ca marche po
Si j'ai un $dbh qui est ouvert vers la base "gmp", je peux pas faire une requête vers la base "vt"
Marsh Posté le 17-12-2008 à 17:21:29
essaye en ligne de commande, tu verras : tu peux très bien faire un truc de ce style :
use toto;
select * from titi.tutu;
Marsh Posté le 17-12-2008 à 17:22:09
getget a écrit : Ouais mais moi j'ai 2 utilisateurs différents |
Et la base de ton appli à toi est pas visible par celui qui a le droit de lire l'autre?
Marsh Posté le 17-12-2008 à 17:23:06
(genre ce serait une bonne idée d'en faire le propriétaire? )
Marsh Posté le 17-12-2008 à 17:28:25
C'est l'admin réseau de l'IUT qui gère les droits, je peux pas trop faire ce que je veux
Ma seule difficulté, c'est de trouver comment écrire une requête qui va utiliser les 2 connexions en notation "objet"
Marsh Posté le 17-12-2008 à 17:33:52
l'admin réseau qui gère les droits de la db?
Ta difficulté ne peut pas être résolue, ça n'a strictement aucun sens. Pour faire ça il te faut un utilisateur qui peut lire les deux bases à la fois.
Marsh Posté le 17-12-2008 à 17:37:52
RAAAAAAAAAAAAAAAAHHHHH
Une p*ù$ain d'erreur de typo dans ma requète
Ca marche (au moins en local).
Marsh Posté le 17-12-2008 à 19:16:20
On pourrait voir ta requête? Parce que ça fait un moment que je te lis, et je suis toujours pas sûr d'avoir compris ton problème
Marsh Posté le 17-12-2008 à 21:02:22
SELECT gmp.gestiut_profs.Nom AS nomprof,vt.enseignements.nom AS nomenseignement |
Bien évidemment, j'ai changé les noms des bases et j'ai pas mit tous les champs
Marsh Posté le 17-12-2008 à 15:15:42
Bonjour, je cherche à faire un SELECT sur 2 bases (sur le même serveur).
Sans PDO, c'est facile : SELECT * FROM db1.table1, db2.table2 et zou !
Avec PDO, je ne vois pas trop comment faire
---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980