Mysql_select 2 BDD

Résolu/Fermé
malhek69 Messages postés 77 Date d'inscription mardi 6 décembre 2011 Statut Membre Dernière intervention 11 avril 2018 - Modifié par jordane45 le 10/05/2016 à 10:47
malhek69 Messages postés 77 Date d'inscription mardi 6 décembre 2011 Statut Membre Dernière intervention 11 avril 2018 - 1 déc. 2016 à 17:11
Bonjour,

j'ai deux BDD mysql qui ne sont pas sur le même serveur, je souhaite récupérer les données d'une première BDD pour l'insérer dans le deuxième.
Voici mon code en premier:

<?php

// Create first connection to the host named locahost1.
$con1 = @mysql_connect('XX.XXX.XXX.XXX' , 'admin' , 'password');
if(!$con1) {
        echo "ERROR MySQL: Connect to Server locahost 1\n";
        exit;
}
// Create a second connection to the host named locahost2.
$con2 = @mysql_connect('localhost' , 'admin' , 'password', true);
if(!$con2) {
        echo "ERROR MySQL: Connect to Server locahost 2\n";
        exit;
}

echo $con1."\n";
echo $con2."\n";
// Connect to the selected MySQL database – using the connection $con1.
@mysql_select_db(‘asteriskcdrdb′, $con1);
// Connect to the selected MySQL database – using the connection $con2.
@mysql_select_db(‘facturation′, $con2);

// requête sql pour vider la table cdrimport
$sql = "TRUNCATE TABLE facturation.importcdr";
$req = mysql_query($sql) or die ('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
echo nl2br("Truncate importcdr OK");

// requête sql copie des données vers la base facturation
$sql = "INSERT INTO facturation.importcdr (calldate,clid,src,dst,duration,billsec)". 
" (SELECT calldate,clid,src,dst,duration,billsec FROM asteriskcdrdb.cdr WHERE cdr.calldate LIKE '$lastmonth')";
$req = mysql_query($sql) or die ('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
echo nl2br("copie données vers base factu OK");


Et voici l'erreur que j'ai :

Erreur SQL !<br>INSERT INTO facturation.importcdr (calldate,clid,src,dst,duration,billsec) (SELECT calldate,clid,src,dst,duration,billsec FROM asteriskcdrdb.cdr WHERE cdr.calldate LIKE '2016-04')<br>Table 'asteriskcdrdb.cdr' doesn't exist


Je force la connexion avec mon true donc je ne comprends pas où est l'erreur. Qqn a une idée par hasard?



Choisis un travail que tu aimes, et tu n'auras pas à travailler un seul jour de ta vie


EDIT : Ajout du LANGAGE dans les balises de code.
A voir également:

2 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
10 mai 2016 à 10:48
Bonjour,

Tu utilises l'ancienne extension mysql ....
https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top
Je t'invite à passer à PDO ou à mysqli !

Commence par changer ça.

0
malhek69 Messages postés 77 Date d'inscription mardi 6 décembre 2011 Statut Membre Dernière intervention 11 avril 2018 3
10 mai 2016 à 10:50
Alors ça malheureusement c'est bien la remarque que j'ai faite mais on me demande quand même de le faire avec :/
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
11 mai 2016 à 13:42
SAlut,

Le message d'erreur est explicite : la table asteriskcdrdb.cdr n'existe pas.

Si la connexion n'est pas définie pour la fonction mysql_query (le deuxième paramètre), celle-ci prend la dernière connexion mysql ouverte, soit $con2 dans ton cas. Or cette table est accessible via $con1. Donc :
mysql_query($sql, $con1);


Bonne journée,
0
malhek69 Messages postés 77 Date d'inscription mardi 6 décembre 2011 Statut Membre Dernière intervention 11 avril 2018 3
11 mai 2016 à 14:51
oui mais dans ce cas c'est l'autre BDD qui ne sera pas accessible, elles ne sont pas sur même serveur et je souhaite copier les données d'une base à une autre
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
11 mai 2016 à 16:45
Ok je n'avais pas compris que ta requête accèdes aux deux serveurs, hélas cela ne semble pas possible.
La solution idéale pour accéder à plusieurs serveurs mysql via une requête semble être le Federated Storage Engine :
https://dev.mysql.com/doc/refman/5.6/en/federated-description.html
https://dev.mysql.com/doc/refman/5.0/en/federated-use.html
Je ne connais pas cette solution donc je ne pourrais t'en dire plus.

Une autre solution p-e plus simple serait de faire un export de la table du premier serveur vers le second serveur afin de se passer du problème de connexion à deux serveurs.
0
malhek69 Messages postés 77 Date d'inscription mardi 6 décembre 2011 Statut Membre Dernière intervention 11 avril 2018 3
1 déc. 2016 à 17:11
ça fait longtemps mais au final c'est un peu ce que j'ai fait
je me co au premier serveur, je récupère les infos et les insère dans l'autre bdd et hop je me co à l'autre BDD. Bref du coup ça marche
Merci ;)
0