Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

requetes sur 2 bases

9 réponses
Avatar
bcnl
je voudrais faire une requête interrogeant 2 bases (plus exactement 2 tables
de 2 bases) situées sur le même serveur mais avec des paramètres
(utilisateur et mot de passe) différents. Pour l'instant, je n'y suis pas
arrivé. Mais d'abord est-ce possible ?

9 réponses

Avatar
Sebastian Lauwers
bcnl wrote:

je voudrais faire une requête interrogeant 2 bases (plus exactement 2 tables
de 2 bases) situées sur le même serveur mais avec des paramètres
(utilisateur et mot de passe) différents. Pour l'instant, je n'y suis pas
arrivé. Mais d'abord est-ce possible ?


Cela dépend, certains hébergeurs (e.g.: free et online) empêchent que
l'on accède à une bdd d'un compte avec un autre compte.

Exemple: Si le compte ftp est toto et que ce compte par l'intermédiaire
d'un script php tente d'accéder à la base de données avec le nom
d'utilisateur toto2, le server mysql en interdira l'accès.

Il faut voir maintenant si ton hébergeur (ou plutot le serveur mysql)
autorise les connexions fantomes.

Amicalement,
Sebastian

--
The most likely way for the world to be destroyed,
most experts agree, is by accident.
That's where we come in; we're computer professionals.
We cause accidents.
--Nathaniel Borenstein

Avatar
John Gallet
Bonjour,

je voudrais faire une requête interrogeant 2 bases (plus exactement 2 tables
de 2 bases) situées sur le même serveur mais avec des paramètres
(utilisateur et mot de passe) différents.
Ok.


Pour l'instant, je n'y suis pas arrivé.
C'est partiellement pas de ta faute.


Mais d'abord est-ce possible ?
Oui, évidemment, c'est un besoin ultra classique.


Il suffit d'utiliser dans toutes les fonctions mysql_select_db, _query,
_errno(), etc... l'identifiant de connexion renvoyé par mysql_connect.
Par exemple :

$dad1=mysql_connect(paramètres serveur1);
if($dad1=úLSE) exit(...);
$dad2=mysql_connect(paramètres serveur 2);
if($dad2=úLSE) exit(...);
$sel=mysql_select_db("base1",$dad1); // obligatoire de préciser sinon
c'est $dad2 qui est utilisé
if($sel=úLSE) exit(...);
$sel=mysql_select_db("base2",$dad2); // facultatif, mais préférable pour
s'y retrouver

$query1="SELECT col1 FROM table1 WHERE.....";
$res1=mysql_query($query1,$dad1); // obligatoire
if($res1=úLSE) exit(....);
while($row=mysql_fetch_row($res1))
{
$query2="INSERT INTO table2 (col) VALUES ('$row[0]') ";
$res2=mysql_query($query2,$dad2); // facultatif
if($res2=úLSE) // gerer erreur : arret violent ou pas, etc...
}

Où je dis que c'est "partiellement" de ta faute c'est que tu aurais dû
voir ça dans le manuel, mais comme la promotion systématique de
l'assistanat fait que depuis une certaine version de php4 (je ne sais
plus laquelle) quand on ne passe pas l'identifiant, ça marche quand
même, plus personne ne se pose plus les bonnes questions et le manuel
lui même présente parfois seulement la version simplifiée.

<remarque générale adressée à tout le monde et personne>
Bref, utilisez systématiquement le retour de mysql_connect() dans tous
vos scripts, ça vous permettra de comprendre ce que vous faites, de
comprendre la portée des variables, et quand vous aurez besoin de vous
connecter à deux bases, le problème ne se posera pas.
</remarque>

Le seul cas pénible concerne le besoin de se connecter avec le même
utilisateur, sur deux bases différentes, sur le même serveur, avec une
version de php un peu ancienne ne permettant pas de forcer
mysql_connect() à ouvrir un nouveau lien. On est alors obligé de faire
systématiquement un select_db() entre toute les requêtes, ou de tricher
en spécifiant le port d'écoute de mysql dans l'ouverture de l'un des
deux mysql_connect().

HTH
JG

Avatar
Sebastian Lauwers
Bon bha je me tais après ce qu'a mis John.

Sebastian Lauwers wrote:

bcnl wrote:

je voudrais faire une requête interrogeant 2 bases (plus exactement 2
tables
de 2 bases) situées sur le même serveur mais avec des paramètres
(utilisateur et mot de passe) différents. Pour l'instant, je n'y suis pas
arrivé. Mais d'abord est-ce possible ?



Cela dépend, certains hébergeurs (e.g.: free et online) empêchent que
l'on accède à une bdd d'un compte avec un autre compte.

Exemple: Si le compte ftp est toto et que ce compte par l'intermédiaire
d'un script php tente d'accéder à la base de données avec le nom
d'utilisateur toto2, le server mysql en interdira l'accès.

Il faut voir maintenant si ton hébergeur (ou plutot le serveur mysql)
autorise les connexions fantomes.

Amicalement,
Sebastian




--
The most likely way for the world to be destroyed,
most experts agree, is by accident.
That's where we come in; we're computer professionals.
We cause accidents.
--Nathaniel Borenstein


Avatar
John Gallet
Bon bha je me tais après ce qu'a mis John


Je ne vois pas pourquoi. Je parlais de la possiblité technique de le
faire en php, tu parlais des restrictions pouvant être mises en place
par des hébergeurs, ce à quoi je n'avais pas du tout pensé (réflexe
"m'en fous j'ai mon serveur" qui n'est pas nécessairement approprié).

Les deux réponses sont donc tout à fait complémentaires.

JG

Avatar
bcnl
Merci pour ces 2 réponses. Mais petite précision je peux me connecter
à mes 2 bases dans le même script, le serveur ne l'interdit pas. ce
que je n'arrive pas à faire c'est une requete avec une jointure entre
ces 2 bases du genre :

SELECT * FROM base1.table1 INNER JOIN base2.table2 USING(Id)

J'ai droit alors à un message d'erreur qui me signale que
l'utilisateur de la base 1 n'a pas les droits d'accès à la base 2 (ou
le contraire suivant le dernier mysql.connect exécuté).



Sebastian Lauwers wrote in message news:<cclt6i$pq3$...
bcnl wrote:

je voudrais faire une requête interrogeant 2 bases (plus exactement 2 tables
de 2 bases) situées sur le même serveur mais avec des paramètres
(utilisateur et mot de passe) différents. Pour l'instant, je n'y suis pas
arrivé. Mais d'abord est-ce possible ?


Cela dépend, certains hébergeurs (e.g.: free et online) empêchent que
l'on accède à une bdd d'un compte avec un autre compte.

Exemple: Si le compte ftp est toto et que ce compte par l'intermédiaire
d'un script php tente d'accéder à la base de données avec le nom
d'utilisateur toto2, le server mysql en interdira l'accès.

Il faut voir maintenant si ton hébergeur (ou plutot le serveur mysql)
autorise les connexions fantomes.

Amicalement,
Sebastian



Avatar
John Gallet
Bonjour,

que je n'arrive pas à faire c'est une requete avec une jointure entre
ces 2 bases du genre :

SELECT * FROM base1.table1 INNER JOIN base2.table2 USING(Id)

J'ai droit alors à un message d'erreur qui me signale que
l'utilisateur de la base 1 n'a pas les droits d'accès à la base 2 (ou
le contraire suivant le dernier mysql.connect exécuté)


Là on est clairement hors de php et dans un problème de droits sgbdr :
direction fr.comp.applications.sgbd
NB : les jointures entre deux bases différentes, c'est clairement le bordel
à gérer et si c'est sur deux serveurs différents, sauf à disposer de
mécanismes ultra spécifiques comme il peut en exister (de mémoire) sous
Oracle, les perfs sont dégueulasses (si ça marche tout court).

a++
JG

Avatar
bcnl
Donc ça n'a pas l'air faisable directement. Et quelles sont les
solutions paliatives ?

création d'une table temporaire par exemple...

John Gallet wrote in message news:<40efb7dc$0$29380> Là on est clairement hors de php et dans un problème de droits sgbdr :
direction fr.comp.applications.sgbd
NB : les jointures entre deux bases différentes, c'est clairement le bordel
à gérer et si c'est sur deux serveurs différents, sauf à disposer de
mécanismes ultra spécifiques comme il peut en exister (de mémoire) sous
Oracle, les perfs sont dégueulasses (si ça marche tout court).

a++
JG


Avatar
John Gallet
Donc ça n'a pas l'air faisable directement. Et quelles sont les
solutions paliatives ?



De manière générale : réfléchir à un schéma de base de données cohérent.

Impossible de répondre dans l'absolu sans connaître exactement el besoin, et
c'est un problème global de design, pas de php. Première question à se poser
: ne peut-on pas regrouper les deux bases sur le même serveur.

a++
JG

Avatar
Leonick
"bcnl" a écrit dans le message de
news:
Donc ça n'a pas l'air faisable directement. Et quelles sont les
solutions paliatives ?

création d'une table temporaire par exemple...

Une réplication de table dans une des deux BdD ?


Leonick