3/5 (5 avis)
Snippet vu 4 384 fois - Téléchargée 19 fois
$sql_serveur = "à renseigner"; // Serveur mySQL $sql_base = "à renseigner"; // Base de données mySQL $sql_login = "à renseigner"; // Login de connection a mySQL $sql_password = "à renseigner"; // Mot de passe pour mySQL $lk = @mysql_connect($sql_serveur, $sql_login, $sql_password) or die(mysql_error ()); @mysql_select_db($sql_base, $lk) or die(mysql_error()); ?> <html> <head> <title>Récupère la place perdu dans une base de données MySQL</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <?php //on prépare la requête $sql = "OPTIMIZE TABLE "; //on recherche toutes les données des tables $req = mysql_query('SHOW TABLE STATUS', $lk); while($data = mysql_fetch_assoc($req)) { //on regarde seulement les tables qui affichent des pertes if($data['Data_free'] > ) { //et on l'inclut si elle comporte des pertes $sql .= '`'.$data['Name'].'`, '; echo $data['Name'] . "<br>\n"; } } //on enlève le ', ' de trop $sql = substr($sql, , (strlen($sql)-2)); //et on optimise mysql_query($sql, $lk); mysql_close($lk); ?> </body> </html>
18 oct. 2009 à 03:40
Quant au niveau initié, faudrait voir à pas pousser mémé dans les orties non plus, un code de débutant que l'on trouve partout.
Une page html pour ca ? Le code aurait pu etre integrer dans une fonction appellée par la page.
12 oct. 2009 à 09:18
rtrim ( $sql, ", ");
11 oct. 2009 à 22:25
J'ai donc ré-écrit le code suivant :
------------------------------------------------------------------------
<?php
//utilisation http://localhost/[test]/optibase.php[?b= mabase]
// [test] étant l'allias de votre connexion PHP locale
// Serveur mySQL à renseigner
$serveur = "localhost";
// Base de données mySQL à renseigner
if((isset($_GET['b']))&&(!empty($_GET['b'])))$base = $_GET['b']; else $base = "mysql";
// Login de connexion à renseigner
$utilisateur = "root";
// Mot de passe pour mySQL à renseigner
$mot_de_passe = "";
?>
<html>
<head>
<title>Récupère la place perdue dans une base de données MySQL</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style>
table, td, th {border:4px inset grey;margin:0 auto;}
h1 {text-align:center;}
</style>
</head>
Optimisation de la Base <?php echo $base ;?>
Nom de la table |Place perdue |Traitée |
<?php
$connexion = @mysql_connect($serveur, $utilisateur, $mot_de_passe)
or die(\"
\nCONTINUER\".mysql_error().\"\n\n</html> \");
//'retour.html' à renseigner
$ok=false;
//on prépare la requête
$requete= \"OPTIMIZE TABLE \";
//on recherche toutes les données des tables
$resultat = mysql_query('SHOW TABLE STATUS FROM '.$base.';');
while($ligne = mysql_fetch_assoc($resultat)) {
echo \"----
".$ligne['Name'] . ", ". $ligne['Data_free'].", ";
if($ligne['Data_free'] >0 ) {//on ne garde que les tables qui affichent des pertes
echo "oui, \n\";
$ok=true;
$requete .= '`'.$ligne['Name'].'`, ';
}else echo \"non</td>\n\";
}
echo"\n
\n";
//on enlève le ', ' de trop - peut-être à améliorer
$requete = substr($requete, 0, (strlen($requete)-2));
if ($ok) { //et on optimise
echo "
\n
\n
\nTraitement : `".$requete . "` effectué.
\n";
mysql_query($requete, $connection);
} else echo "
\n
\n
\nAucun traitement à faire.
\n";
mysql_close($connection);
?>
</html>
------------------------------------------------------------------------
Spécialement pour Vavavlp,j'ai amélioré la fonction die ( qui ne revenant pas, fabrique une page mal formée ).
Quelques autres petites astuces pour grands débutants.
J'utilise <table> qui n'est pas du tout "deprecated".
Inutile de gérer les lettres accentuées, ce programme est fait pour être en local ; par contre le $serveur peut commencer par "http:" et optimiser une base en ligne.
Plus là : http://www.phpcs.com/forum/sujet-SAVOIR-QUAND-ON-DOIT-OPTIMISER-TABLE-MYSQL_483594.aspx
Programmez, prenez de la peine...
Amusez-vous bien !
10 oct. 2009 à 11:36
Là je sais pas si ça vient du code ou du site mais faudrait indenter aussi.
10 oct. 2009 à 11:35
Toutefois quelques remarques:
- Tu oublies le <?php de départ,
- die(mysql_error()); avant même d'avoir afficher la balise <html> :s
- mysql_ pdo serai mieux quand même,
- pas de xHTML,
- if($data['Data_free'] > ) on a le droit ?? faut pas un zéro (je suis pas sur jamais essayer ^^).
Voila avec ces quelques amélioration ça fera un code bien pratique ;)
Cordialement,
Vavavlp
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.