Besoin de conseils pour script PHP/MySQL.
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
Code:
SELECT `TABLE`.`name` FROM `TABLE`
plutôt faire
Code:
SELECT `base`.`TABLE`.`name` FROM `base`.`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.
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:
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:
Code:
1 2 3
| SELECT *
FROM `ANNONCE`
INNER JOIN FAC_FOURNISSEUR AS FF ON FF.id = `ANNONCE`.f_id' |
Sortie:
Code:
1 2 3
| SELECT *
FROM `base1`.`ANNONCE`
INNER JOIN `base2`.FAC_FOURNISSEUR AS FF ON FF.id = `base1`.`ANNONCE`.f_id |
Entrée:
Code:
1 2 3
| SELECT *
FROM ANNONCE
INNER JOIN FAC_FOURNISSEUR AS FF ON FF.id = ANNONCE.f_id |
Sortie:
Code:
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.