Page 1 sur 6
Une seule requete PDO avec 2 bases de donnees MySQL
Posté : 18 juil. 2011, 14:53
par rimie
Bonjout,
J'ai une requete que je dois faire le join de 2 tables, les 2 appartiennent a de bases de donnees differentes, comment faire pour le prepare, execute et l'affichage des resultats, sachant que la premiere connexion est $connexion1 et la 2eme est $connexion2, et la preparation se fait par exemple:
$connexion1 = new PDO ...
$connexion2 = new PDO ...
$query = 'SELECT * FROM db1.table1 JOIN db2.table2 ... WHERE ... id = ?;';
$prep = $connexion1->prepare($query);
merci a vous
Re: Une seule requete PDO avec 2 bases de donnees MySQL
Posté : 18 juil. 2011, 18:14
par stealth35
avec 2 instances c'est pas possible, les bases sont sur le même serveur ?
Re: Une seule requete PDO avec 2 bases de donnees MySQL
Posté : 19 juil. 2011, 01:58
par rimie
avec 2 instances c'est pas possible, les bases sont sur le même serveur ?
oui les 2 bases sont sur le meme serveur, c'est comme en MySQL normal, on fait:
mysql_select_db($db1);
mysql_select_db($db2);
SELECT * FROM db1.table1, db2.table2 ....
Re: Une seule requete PDO avec 2 bases de donnees MySQL
Posté : 19 juil. 2011, 14:58
par rimie
est ce qu'il n y a pas une methode d'utiliser 2 bases de donnees en PDO?
Re: Une seule requete PDO avec 2 bases de donnees MySQL
Posté : 19 juil. 2011, 16:41
par devlop78
Je ne vois pas l'intêret de sélectionner les deux bases de données. Si tu précises à PDO ou Mysql que tu vas utiliser la base de données x, c'est pour éviter d'aller écrire le nom de la base de données à chaque fois. Il faut juste que MySQL sache de quoi tu parles.
Je n'ai jamais utilisé cela, mais je ne vois pas pourquoi ça poserait problème de faire une jointure entre deux bases de données, à partir du moment où il s'agit du même serveur, et du même utilisateur avec les bons droits.
Active les erreurs pour PDO, et dis-nous quel erreur il rapporte;
Re: Une seule requete PDO avec 2 bases de donnees MySQL
Posté : 19 juil. 2011, 20:59
par stealth35
pas besion d'ouvrir 2 connexions, ca na jamais été obligatoire de devoir selectionné un base pour se connecter non plus
dans tes requete fait
SELECT blabla FROM base1.truc, base2.machin
Re: Une seule requete PDO avec 2 bases de donnees MySQL
Posté : 23 juil. 2011, 09:17
par rimie
voila j'ai tests ce code, je me trouve dans un bug:
le premier code commente marche bien, j'assigne les valeurs, le 2eme nom, en utilisant bindValue, c'est quoi l'erreur exactement?
//$query = 'SELECT * FROM '.$PARAM_nom_bd.'.admin, '.$PARAM_nom_bd1.'.users WHERE '.$PARAM_nom_bd.'.admin.id = '.$PARAM_nom_bd1.'.users.id1';
$query = 'SELECT * FROM '.$PARAM_nom_bd.'.admin, '.$PARAM_nom_bd1.'.users WHERE '.$PARAM_nom_bd.'.admin.id = :id';
echo $query.'<br />';
$prep = $connexion->prepare($query);
$prep->bindParam('id', $PARAM_nom_bd1.'.users.id1', PDO::PARAM_INT);
je recois cette erreur: Fatal error: Cannot pass parameter 2 by reference in pdo2databases.php on line 38
ligne 38: $prep->bindParam('id', $PARAM_nom_bd1.'.users.id1', PDO::PARAM_INT);
et meme si j'utilise bindValue, ca marche pas, aucune erreur mais elle n'affiche aucun resultat
merci
Re: Une seule requete PDO avec 2 bases de donnees MySQL
Posté : 23 juil. 2011, 12:25
par moogli
salut,
A tu essayé de le passer "en dur", ça devrais fonctionner ?
a tu essayer la concaténation avant le bindvalue ? ( $truc = $PARAM_nom_bd1.'.users.id1'; $prep->bindParam('id', $truc, PDO::PARAM_INT);
Le message d'erreur c'est un message php ?
a tu utiliser un try / catch ? (on pourrait peut être avoir un message plus explicite).
@+
Re: Une seule requete PDO avec 2 bases de donnees MySQL
Posté : 23 juil. 2011, 14:20
par rimie
j'ai essaye avec catch, et voila le code entier, ca ne donne aucune erreur:
<?php
try
{
$connexion = new PDO('mysql:host='.$PARAM_hote.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe
, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
}
catch(Exception $e)
{
echo 'Erreur : '.$e->getMessage().'<br />';
echo 'N° : '.$e->getCode();
}
try
{
$query = 'SELECT * FROM '.$PARAM_nom_bd.'.admin, '.$PARAM_nom_bd1.'.users WHERE '.$PARAM_nom_bd.'.admin.id = ?';
echo $query.'<br />';
$prep = $connexion->prepare($query);
$prep->bindValue(1, $PARAM_nom_bd1.'.users.id1', PDO::PARAM_INT);
$prep->execute();
$arrAll = $prep->fetchAll();
var_dump($arrAll);
if(!empty($arrAll))
{
foreach($arrAll as $arr)
{
$id = $arr['id'];
echo $id;
}
}
$prep->closeCursor();
$prep = NULL;
}
catch(Exception $er)
{
echo 'Erreur : '.$er->getMessage().'<br />';
echo 'N° : '.$er->getCode();
}
?>
Re: Une seule requete PDO avec 2 bases de donnees MySQL
Posté : 23 juil. 2011, 14:30
par moogli
tu peux ajouter le $er->getTraceAsString(); pour debugger c'est parfois pratique.
a tu essayer en créant la chaine avant ?
je vais essayer
@+
Re: Une seule requete PDO avec 2 bases de donnees MySQL
Posté : 23 juil. 2011, 14:42
par rimie
aucun message d'erreur n'est retourne, alors ce bout de code je le mets ou exactement?
( $truc = $PARAM_nom_bd1.'.users.id1'; $prep->bindParam('id', $truc, PDO::PARAM_INT);
Re: Une seule requete PDO avec 2 bases de donnees MySQL
Posté : 23 juil. 2011, 20:05
par devlop78
aucun message d'erreur n'est retourne, alors ce bout de code je le mets ou exactement?
( $truc = $PARAM_nom_bd1.'.users.id1'; $prep->bindParam('id', $truc, PDO::PARAM_INT);
PDO::PARAM_INT pour un String ?
Re: Une seule requete PDO avec 2 bases de donnees MySQL
Posté : 24 juil. 2011, 00:12
par moogli
Raaaaa vouii j'suis mirro :/
Le message d'erreur est pas vraiment explicite pour le coup
@+
Re: Une seule requete PDO avec 2 bases de donnees MySQL
Posté : 24 juil. 2011, 14:22
par rimie
PDO::PARAM_INT pour un String ?
je pense que ca doit etre un INT pas un STR pace que c'est un id
Re: Une seule requete PDO avec 2 bases de donnees MySQL
Posté : 24 juil. 2011, 16:09
par moogli
oui mais non, tu passe une chaine de caractère à la fonction : $PARAM_nom_bd1.'.users.id1' <= ça c'est une chaine de caractère.
Tu devrais passer un entier provenant d'un formulaire, session ou je ne sais quoi.
sinon fixe le !
@+