[RESOLU] Savoir le poids d'une table en PDO

Eléphanteau du PHP | 18 Messages

01 nov. 2014, 21:00

Salut à tous :D : )

Voilà mon problème, je fais le back-office de mon site et j'aimerai bien afficher la taille ou le poids (en mo ou autre.. ) de chaque table de ma base de donnée.

Je sais bien que le plus simple c'est d'aller dans phpmyadmin, mais j'aimerai vraiment avoir ces infos sur le site.

Alors si vous avez des idées en PDO ce serai vraiment cool :D

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

01 nov. 2014, 21:20

salut,

Une petite demande à google et le premier lien te fournit la solution => http://sql.sh/1999-mysql-taille-base-de-donnees ;)

bonne lecture


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 18 Messages

01 nov. 2014, 21:51

Merci mais cette page ne correspond pas à ma demande. Je rappel je suis en PDO :(

Nestecha
Invité n'ayant pas de compte PHPfrance

01 nov. 2014, 22:25

Je vois pas en quoi le fait d'être en PDO t'empêche d'afficher des requêtes SQL ?

Eléphanteau du PHP | 18 Messages

01 nov. 2014, 22:45

Oui c'est ce que je pensai aussi, mais là visiblement...
J'ai tester :
$G_bdd = new PDO('mysql:host='.$G_bdd_info['serveur'].';dbname='.$G_bdd_info['nom'].'', ''.$G_bdd_info['pseudo'].'', ''.$G_bdd_info['mdp'].'');

echo $G_bdd->query(" SELECT TABLE_NAME, CONCAT(ROUND(((DATA_LENGTH + INDEX_LENGTH - DATA_FREE) / 1024 / 1024), 2), 'Mo') AS TailleMo FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'base_v2' ");

Où base_v2 est le nom de ma base mais la valeur retournée est systématiquement 1. :cry: J'en ai tester d'autre mais même résultat...

ViPHP
xTG
ViPHP | 7331 Messages

02 nov. 2014, 01:14

Remontes les informations indépendamment dans un premier temps pour tenter de comprendre.
- DATA_LENGTH
- INDEX_LENGTH
- DATA_FREE

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

02 nov. 2014, 03:11

Oui c'est ce que je pensai aussi, mais là visiblement...
J'ai tester :
$G_bdd = new PDO('mysql:host='.$G_bdd_info['serveur'].';dbname='.$G_bdd_info['nom'].'', ''.$G_bdd_info['pseudo'].'', ''.$G_bdd_info['mdp'].'');

echo $G_bdd->query(" SELECT TABLE_NAME, CONCAT(ROUND(((DATA_LENGTH + INDEX_LENGTH - DATA_FREE) / 1024 / 1024), 2), 'Mo') AS TailleMo FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'base_v2' ");

Où base_v2 est le nom de ma base mais la valeur retournée est systématiquement 1. :cry: J'en ai tester d'autre mais même résultat...

peux être que si tu lisais un peu plus la doc avant de répondre tu aurais compris que ce que tu fait ne peux pas afficher le résultat ainsi.
La méthode query retourne un objet PDOStatement qui te fournira les données en itérant dessus.
tu as un exemple dans la doc de la fonction query.

Quand à la requête teste la avec un client sql avant de l'utiliser dans ton code. C'est le meilleur moyen d'être certain qu'elle fonctionne (ce qui est le cas de celle fournit par mon premier lien).

@+
Il en faut peu pour être heureux ......

ViPHP
xTG
ViPHP | 7331 Messages

02 nov. 2014, 10:55

Je suis en train de me demander comment tu fais pour pas être encore plus fatigué que moi à 2h du mat' Moogli... =D>

Mammouth du PHP | 2278 Messages

02 nov. 2014, 11:41

Surtout que le lien est extrêmement clair et facile à suivre:
Dans n'import quel script PHP tu teconnectes et tu sélectionnes la basede dolnnées vouluecomme ceci qu'il m'a fallu taper, ce qui a été le plus long
<?PHP

$mysqli = mysqli_init();
$mysqli->real_connect("localhost", "root", "", "corregidor");
$requete = "SELECT
  table_schema AS NomBaseDeDonnees, 
  ROUND(SUM( data_length + index_length ) / 1024 / 1024, 2) AS BaseDonneesMo 
FROM information_schema.TABLES
GROUP BY TABLE_SCHEMA;";
$resultat = $mysqli->query($requete);
while($obj = $resultat->fetch_object()){
	$nombase = $obj->NomBaseDeDonnees;
	$taille = $obj->BaseDonneesMo; 
	print "<br>Nom $nombase $taille";
}
?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 18 Messages

06 mars 2015, 12:55

Merci beaucoup : )