Mysql_select 2 BDD [Résolu/Fermé]

malhek69 75 Messages postés mardi 6 décembre 2011Date d'inscription 17 novembre 2017 Dernière intervention - 10 mai 2016 à 10:43 - Dernière réponse : malhek69 75 Messages postés mardi 6 décembre 2011Date d'inscription 17 novembre 2017 Dernière intervention
- 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.
Afficher la suite 

6 réponses

jordane45 19730 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 janvier 2018 Dernière intervention - 10 mai 2016 à 10:48
0
Utile
1
Bonjour,

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

Commence par changer ça.

malhek69 75 Messages postés mardi 6 décembre 2011Date d'inscription 17 novembre 2017 Dernière intervention - 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 :/
Pitet 2368 Messages postés lundi 11 février 2013Date d'inscription 15 janvier 2018 Dernière intervention - 11 mai 2016 à 13:42
0
Utile
3
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,
malhek69 75 Messages postés mardi 6 décembre 2011Date d'inscription 17 novembre 2017 Dernière intervention - 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
Pitet 2368 Messages postés lundi 11 février 2013Date d'inscription 15 janvier 2018 Dernière intervention - 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 :
http://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.
malhek69 75 Messages postés mardi 6 décembre 2011Date d'inscription 17 novembre 2017 Dernière intervention - 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 ;)