Aller au contenu

Vérification de structure de tables MySql


Sujets conseillés

Posté (modifié)

Bonjour

Sur un site Web, jai un nombre important de tables MySql qui constituent 5 groupes ; toutes les tables dun même groupe ont la même structure, en principe, mais un contenu différent.

Comme ces tables ont été créées au fil du temps et quune colonne ou une autre a été ajoutée à la structure, toujours au fil du temps, il arrive quune table manque dune colonne.

Plutôt que de vérifier chaque table une par une, je cherche un moyen simple de vérifier que ces tables ont bien toutes leurs colonnes.

Pour le moment, je fais ça pour chaque groupe de tables:


Pour lire la première ligne:
${"requete".$numeroBase} = "SELECT * FROM ".$table." limit 1";

Pour tester le cas où la dernière colonne de la ligne n'existe pas:
if (!isset($myrow[$nbColonne])) { echo "<br>La dernière colonne n'existe pas ....

Quand une table existe, elle a souvent au moins une ligne mais elle peut aussi être vide; la dernière colonne de la première ligne, quand elle existe, peut ne pas être renseignée.

A votre avis, est-ce la bonne solution ?

Par avance merci de votre aide.

Francois

Modifié par francoisch
Posté

Salut,

Sur tout serveur mysql (supérieur à 5.0.2) tu as une base de données information_schema, qui liste toutes les bases, les tables, les colonnes, etc... c'est l'idéal pour vérifier la structure d'une table. Même si tu n'es pas connecté en tant qu'administrateur tu y as accès en lecture. Exemple :

SELECT COLUMN_NAME, ORDINAL_POSITION
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'ma_table'

te retourne la liste des colonnes de la table ma_table. Je pense que ça pourrait t'aider ;)

Voir la doc : http://dev.mysql.com/doc/refman/5.0/fr/information-schema.html

Posté (modifié)

bonjour Ernestine et merci encore de ton aide.

Cette commande, que je ne connaissais pas, liste effectivement les noms et ordre des colonnes d'une table.

Ce que j'avais trouvé jusqu'ici ne fonctionnait pas avec une table vide, et j'en ai plusieurs.

Il faut maintenant que je vois comment automatiser ça pour n'afficher que ce qui serait différent du schéma normal de chaque table.

Merci encore de ton aide.

Francois

---------------------------------------------------------

Finalement, j'ai fait ça:

- comparer la structure standard avec la structure lue ici, avec array_diff()

- compter les différences dans la table résultat avec count()

Ca parait bien fonctionner.

Merci encore.

Francois

Modifié par francoisch
Posté

Une difficulté, j'ai:


Warning: mysql_query() [function.mysql-query]: Unable to save result set

sur:


$result = mysql_query($requete,$connexion);

assez souvent mais pas toujours.

Ca m'étonne que la requête passe parfois mais se plante d'autres fois.

A votre avis?

Francois

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...