Bonjour
Je vous explique ma situation. Je travaille sur une interface de gestion, utilisant HTML/PHP/MySQL. Jusqu'à maintenant on utilisait une seule Base seulement maintenant on a besoin d'isoler certaines tables dans une nouvelle base.
Du coup au niveau des requêtes faut tout changer, sauf si on ruse:
- J'ai d'abord pensé a ouvrir les deux tables puis tester une puis l'autre pour voir laquelle marche, mais le souci c'est qu'il y a des jointures entre des tables de la base1 et de la base2.
- Alors je me suis penché sur une autre solution au lieu d'avoir une syntaxe
plutôt faire
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part SELECT `TABLE`.`name` FROM `TABLE`
Seulement le problème c'est qu'il doit y avoir un truc comme 1000 requêtes donc tout faire a la main c'est dur.
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part SELECT `base`.`TABLE`.`name` FROM `base`.`TABLE`
Donc j'ai crée un petit script pour faire tout sa a ma place mais j'ai besoin d'aide pour l'améliorer le voici:
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 <?php // Récupérer associations table => base function create_assoc() { $query = mysql_query('SHOW TABLES FROM base1'); while ($result = mysql_fetch_row($query)) { $assoc[strtoupper($result[0])] = '`base1`'; } $query = mysql_query('SHOW TABLES FROM base2'); while ($result = mysql_fetch_row($query)) { $assoc[strtoupper($result[0])] = '`base2`'; } return $assoc; } // Remplace table par base.table function parser($requete) { $assoc = create_assoc(); foreach ($assoc as $table => $base) { $requete = preg_replace('/(\s)([\`]*'.$table.'[\s\.\`\n])/', '${1}'.$base.'.${2}', $requete); } return $requete; } $handle = mysql_connect('localhost', 'root', ''); echo parser($argv[1])."\n"; mysql_close($handle); ?>
Voila ce qu'il donne pour l'instant:
Entrée:
Sortie:
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT * FROM `ANNONCE` INNER JOIN FAC_FOURNISSEUR AS FF ON FF.id = `ANNONCE`.f_id'
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT * FROM `base1`.`ANNONCE` INNER JOIN `base2`.FAC_FOURNISSEUR AS FF ON FF.id = `base1`.`ANNONCE`.f_id
Entrée:
Sortie:
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT * FROM ANNONCE INNER JOIN FAC_FOURNISSEUR AS FF ON FF.id = ANNONCE.f_id
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT * FROM `base1`.ANNONCE INNER JOIN `base2`.FAC_FOURNISSEUR AS FF ON FF.id = `base1`.ANNONCE.f_id
Il m'a l'air correct mais j'ai peur qu'il fasse des betises ou que sa crée un problème de sécurité. Donc j'aimerais avoir vos conseils pour l'améliorer.
Merci d'avance.







Répondre avec citation
Partager