Page 1 sur 1
Connexions paralléles
Posté : 14 mai 2007, 16:43
par bo0n
Bonjour, je suis actuellement sur un projet qui consiste à synchroniser des données entre deux appli web.
Mon probléme porte sur la connexion entre les 2 bases que j'utilise dans un script qui envoi en masse les données d'une base à l'autre.
J'ai une fonction connect1 qui effectue la connexion à la 1ére base et connect2 à la deuxiéme.
Lors de l'exécution de mon script je parcours les résultats de ma premiére base, j'envoi à la deuxiéme ces résultats puis je reparcours d'autres résultats sur cette premiére base que je réenvoi à la deuxiéme, etc...
Je jongle donc 3,4 fois de base a chaque boucle d'execution et ils y en a des centaines.
Je bosse sur localhost et le probléme est qu'au bout de quelques requétes mes fonction mysql_num_rows, mysql_fetch_array, ... foirent toujours aprés le méme nombre de requétes effectuées comme si un nombre maximum de connexion mysql est possible sur un certain laps de temps.. est-ce ce probléme?
Ma derniére solution est de stocker les valeurs mais cela est trop minucieux, je préférerais trouver une solution simple.
Je vous remercie d'avance pour les propositions que vous pourrez m'apporter...
Posté : 14 mai 2007, 17:03
par Hubert Roksor
Qu'est-ce que tu entends par "jongler avec les connexions" ? Est-ce que tu fermes/ouvres tes connexions à répétition ? Tu sais que tu peux avoir 2 connexions parralèles et envoyer les requêtes par l'une ou l'autre en passant le lien à mysql_query().
Sinon, il se peut que le compteur utilisateur possède une limite de requêtes par heure, il faut demander à l'administrateur de la base.
Tu ferais peut-être mieux de t'orienter vers une autre solution pour synchroniser les données d'une base vers l'autre. Par exemple la réplication, ou des outils comme ceux qui sont cité dans
ce forum MySQL.
Posté : 14 mai 2007, 17:23
par bo0n
Qu'est-ce que tu entends par "jongler avec les connexions" ? Est-ce que tu fermes/ouvres tes connexions à répétition ? Tu sais que tu peux avoir 2 connexions parralèles et envoyer les requêtes par l'une ou l'autre en passant le lien à mysql_query().
Voila j'ouvre une base je selectionne les infos, j'ouvre l'autre base et j'injecte ces infos, et ainsi de suite.
J'ai essayé de passer le lien dans mysql_query avec quelquechose du genre mysql_query($req, $link) et mysql_query($req, $link2) pour pouvoir les exécuter sur la bonne base mais ceci n'avait pas l'air de fonctionner, est-ce seulement bien implémenter sous PHP5? ou cela marche t'il correctement sous PHP4?
Posté : 14 mai 2007, 18:06
par Hubert Roksor
Oui, ça marche 100% correctement sous PHP3/4/5. Debugge ton code de façon à utiliser les deux connexions réellement en parallèle.
Posté : 15 mai 2007, 09:17
par bo0n
Merci beaucoup pour ton aide Hubert, c'est parti jme lance, j'espére régler le probléme rapidement...
Posté : 15 mai 2007, 10:53
par bo0n
VOila j'ai modifié mon code afin de gérer les deux connexions mais ca ne marche pas je ne dois pas m'y prendre correctement.
Je vais vous montrer briévement comment jai fait.
J'ai donc dans mon fichier script.php :
require_once(bridge.php) // contient les fonctions d'insert dans la base sugarcrm
$link = mysql_connect('localhost', 'root', '');
$link2 = mysql_connect('localhost', 'root', '');
$dblink1 = mysql_select_db('sugarcrm', $link);
$dblink2 = mysql_select_db('db185304915', $link2);
j'execute mes requéte sur la base db185304915 comme ceci :$resultppr = mysql_query($reqppr, $link2); par exemple
les requétes sur la deuxiémes bases sont le plus souvent des INSERT se trouvant dans des fonctions du fichier bridge, donc je passe les paramétres dans le fichier script.php :
insertCONTACT($nom,$prenom,..., $link); et dans cette fonction je fais un mysql_query($link);
En executant jobtiens des erreurs du genre :
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in D:\WWW\Script\bridge.php
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\WWW\Script\bridge2.php on line 215
pourtant je passe bien le lien de connexion $link en paramétre...
VOyez vous le probléme? Sinon je laisse tomber en stockant les paramétre dans un tableau et je lance les requétes sur la premiére base aprés les requétes effectuées sur la deuxiéme.
Merci
Posté : 15 mai 2007, 11:13
par Hubert Roksor
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in D:\WWW\Script\bridge.php
Le message d'erreur est sans équivoque, le lien que tu as passé à mysql_query() n'en est pas un. Donc tu t'es trompé de variable, mal tapé son nom, peut-être l'as-tu écrasée parce que tu l'as utilisé pour stocker autre chose, etc...
Essaie d'utiliser var_dump() juste avant mysql_query() pour voir ce que représente
vraiment $link. N'oublie pas de vérifier le
champ des variables, si tu es dans une fonction alors il faut utiliser le mot-clé "global". Il faut impérativement que tu persévères jusqu'à ce que cela marche parce que le problème n'est pas très compliqué et il est très courant donc il faudra bien que tu apprennes à le résoudre

Posté : 15 mai 2007, 11:28
par bo0n
Voila ca fonctionne mais j'ai le probléme de départ, c'est a dire qu'au bout d'un certain nombre de requétes j'ai une l'erreur " Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in D:\WWW\Script\script.php on line 17 " qui apparait alors qu'elle marchait pour les x requétes précédentes, et ce, jusqu'à la fin de mes boucles, comme si la base ne voulait plus supporter le nombre de requétes. J'ai essayé de fermer les connexions (mysql_close()) a chaqu'une de celles ci mais rien n'y fait.
Désolé si je ne suis pas trés clair dans mes explications.
Posté : 15 mai 2007, 11:35
par sadeq
puisque tu vise le même serveur (localhost dans ton cas) tu n'as pas besoin d'ouvrir deux connexions $link et $link2.
En effet, les bases de données que tu manipules existent dans le même serveur, tu dois suivre la méthode simpliste suivante:
- 1. ouvrir une connexion au serveur (ex. $Link)
2. utiliser mysql_db_query("base1" , $sql1 , $Link) pour attaquer la première base
3. utiliser mysql_db_query("base2" , $sql2 , $Link) pour attaquer la seconde base
ou bien, utiliser un simple mysql_query() en indiquant le nom de la base dans la requête SQL comme ceci:
Posté : 15 mai 2007, 11:59
par bo0n
Impeccable, merci pour toute votre aide les gars et a plus sur le forum

Posté : 15 mai 2007, 12:13
par Hubert Roksor
puisque tu vise le même serveur
lol j'avais pas vu
C'est sûr que INSERT ... SELECT va être 10 fois plus performant que n'importe quoi d'autre
