Mysql_select 2 BDD

[Résolu/Fermé]
Signaler
Messages postés
77
Date d'inscription
mardi 6 décembre 2011
Statut
Membre
Dernière intervention
11 avril 2018
-
Messages postés
77
Date d'inscription
mardi 6 décembre 2011
Statut
Membre
Dernière intervention
11 avril 2018
-
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.

2 réponses

Messages postés
33731
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 octobre 2021
3 770
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.

Messages postés
77
Date d'inscription
mardi 6 décembre 2011
Statut
Membre
Dernière intervention
11 avril 2018
3
Alors ça malheureusement c'est bien la remarque que j'ai faite mais on me demande quand même de le faire avec :/
Messages postés
2581
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
18 octobre 2021
464
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,
Messages postés
77
Date d'inscription
mardi 6 décembre 2011
Statut
Membre
Dernière intervention
11 avril 2018
3
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
Messages postés
2581
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
18 octobre 2021
464
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.
Messages postés
77
Date d'inscription
mardi 6 décembre 2011
Statut
Membre
Dernière intervention
11 avril 2018
3
ç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 ;)