MySQL Forums
Forum List  »  French

Re: Changer le préfixe d'une base
Posted by: Jean Molliné
Date: February 26, 2010 02:58AM

Ho... on part de loin : pas de soucis, on va y aller une étape à la fois.

-1- Tu dois commencer par établir une connexion à ta base;
-2- Tu dois exécuter la requête "SHOW TABLES" et récupérer le résultat;
-3- Tu dois initialiser une boucle while() sur ce résultat pour renommer la table trouvée dans la ligne à chaque tour de la boucle.
-4- ... ben en fait il y a pas de 4, c'est fini.

Il reste donc à préciser comment faire tout ça. PHP Pour les nuls n'est pas ma référence, on va y aller autrement, voici le code :
<?php
/**
 * Renommage des tables d'un shéma
 */
$serveur = "localhost"; // nom du serveur
$schema  = ""; // Nom de la base de données
$user    = ""; // Nom de l'utilisateur pour la connexion
$mdp     = ""; // Mot de passe de l'utilisateur

$nouveau_prefixe = "prs2"; // Nouveau préfixe à appliquer aux tables
$colonne_result = "Tables_in_". $schema;

/**
 * On établit la connexion
 */
$cnx = mysql_connect($serveur, $user, $mdp);
mysql_select_db($schema, $cnx);
/**
 * On récupère la liste des tables
 */
$sql1 = "SHOW TABLES";
$exec = mysql_query($sql1);
/**
 * Maintenant, on va boucler pour renommer chaque table avec un nouveau préfixe.
 */
while(false !== ($table = mysql_fetch_assoc($exec)))
{
    $nom_table = $table[$colonne_result];
    /*
    echo("<pre>Nom original :\n");
    var_dump($nom_table);
    echo("</pre>\n");
    */
    /**
     * Là, on va isoler le préfixe en cours
     */
    $aInfosNom = explode("_", $nom_table);
    /**
     * On renomme le préfixe
     */
    if(count($aInfosNom) > 1)
    {
        $aInfosNom[0] = $nouveau_prefixe;
    }
    /**
     * On reconstruit le nom de la table
     */
    $nouveau_nom_table = implode("_", $aInfosNom);
    /*
    echo("<pre>Nouveau nom de la table :\n");
    var_dump($nouveau_nom_table);
    echo("</pre>\n");
    */
    /**
     * On crée la requête pour renommer la table
     */
    $sql  = "RENAME TABLE `". $nom_table ."`  TO `". $nouveau_nom_table ."`";
    /*
    echo("<pre>Requête générée :\n");
    var_dump($sql);
    echo("</pre>\n");
    */
    $exec2 = mysql_query($sql, $cnx);
}
/**
 * Terminé
 */
N'oublie pas de remplacer les valeurs pour les variables appropriées. J'ai largement commenté ce code, tu devrais arriver à suivre sans difficultés.

Je l'ai testé et voici ce que ça fait. J'ai une table «test» sur mon serveur avec les tables suivantes :
mysql> SHOW TABLES;
+-------------------+
| Tables_in_test    |
+-------------------+
| test_compta       |
| test_departement  |
| test_membres_mem  |
| test_prefectures  |
| test_regions      |
| test_test         |
| test_utilisateurs |
+-------------------+
7 rows in set (0.00 sec)
Après utilisation de ce code (environ 0.5 seconde) j'ai obtenu ceci :
mysql> SHOW TABLES;
+-------------------+
| Tables_in_test    |
+-------------------+
| prs2_compta       |
| prs2_departement  |
| prs2_membres_mem  |
| prs2_prefectures  |
| prs2_regions      |
| prs2_test         |
| prs2_utilisateurs |
+-------------------+
7 rows in set (0.00 sec)

Note : si tu veux voir ce qui se passe, tu peux décommenter les «var_dump» que j'ai mis dans le code. Tu noteras que si une table n'a pas de préfixe et ne comporte qu'un mot sans «_», elle ne sera pas renommée.

Enjoy! ;-)

______________________________________________________________
Une question bien formulée, c'est un problème bien compris : ça représente déjà les 3/4 de la réponse ;)

Options: ReplyQuote


Subject
Views
Written By
Posted
9736
January 24, 2010 12:57AM
4103
January 24, 2010 04:27AM
3579
January 29, 2010 10:46AM
3875
January 30, 2010 02:36AM
3308
February 25, 2010 11:09PM
3106
February 25, 2010 11:39PM
3071
February 26, 2010 12:38AM
3220
February 26, 2010 01:40AM
3305
February 26, 2010 02:12AM
Re: Changer le préfixe d'une base
6186
February 26, 2010 02:58AM
3692
February 26, 2010 04:19AM
3236
February 26, 2010 04:35AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.