IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Passer un script d'optimisation de MySQL à MySQLi [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Par défaut Passer un script d'optimisation de MySQL à MySQLi
    Salutations,

    Depuis des années, j'utilise un script qui nous avait été donné par un ancien webmaster, pour nettoyer nos BDDs MySQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    	// Fonction de calcul d'execution
    	function calcul_execution() {
    		list($msec, $sec) = explode(' ', microtime());
    		return ((float) $sec + (float) $msec) * 1000000;
    	}
     
    	// <!-- Optimisation N° 1 !-->
     
    	echo '&#x21F0;&nbspOptimisation des tables SQL du Forum &nbsp;(base '.$base1.')...&nbsp';
     
    	// Début de calcul d'execution 1
    	$debut_calcul1 = calcul_execution(1);
     
    	// Connexion SQL
    	mysql_connect("$chemin_db1", "$login1", "$pass1");
    	$table1 = mysql_list_tables($base1);
     
    	//on prépare la requête
    	$sql1 = "OPTIMIZE TABLE ";
     
    	//on recherche toutes les données des tables
    	$req1 = mysql_query('SHOW TABLE STATUS');
    	while($data = mysql_fetch_assoc($req1))
    	{
    		// on regarde seulement les tables qui affichent des pertes
    		if($data['Data_free'] > 0)
    		{
    			// et on l'inclut si elle comporte des pertes
    			$sql1 .= '`'.$data['Name'].'`, ';
    		}
    	}
    	// on enlève le ', ' de trop
    	$sql1 = substr($sql1, 0, (strlen($sql1)-2));
    	// et on optimise
    	mysql_query($sql1);
    	// Fermeture de la connexion
    	mysql_close();
     
    	echo '<font color="#009999"><strong>Ok</strong></font> !';
     
    	// Fin de calcul d'execution 1
    	$fin_calcul1 = calcul_execution(1);
     
    	// Décompte du temps d'execution 1
    	echo '&nbsp;-&nbsp;(<em>&nbsp;';
    	$calcul1 = $fin_calcul1-$debut_calcul1;
    	$calcul1s = ($fin_calcul1-$debut_calcul1)/1000000;
    	if( $calcul1 <= 35000) echo '<font color="green">';
    	else if( $calcul1 <= 50000) echo '<font color="yellow">';
    	else if( $calcul1 <= 100000) echo '<font color="orange">';
    	else echo '<font color="red">';
    	echo '<strong>' .$calcul1. '</strong></font>&nbsp;micro-secondes&nbsp;<font size="-1">(soit&nbsp;<strong>' .$calcul1s. '</strong>&nbsp;secondes)</font>.</em>&nbsp;)<br /><br />';
    - Première question : Ce script est-il toujours utile d'après vous ?
    - Deuxième question : Comment le moderniser pour déjà le passer en MySQLi ?

    Merci de vos aides...

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Ta 1ere question revient en fait à déterminer l'utilité de OPTIMIZE TABLE en MySQL. Je pense que ça dépend de la structure de tes tables, de la volumétrie des données, du type et de la fréquence des requêtes... Bref, ça ne relève pas de la compétence du forum PHP Je te conseille donc d'aller poser la question séparément à nos collègues du forum MySQL Bases de données > MySQL > Administration

    Concernant ton script PHP, la plupart des fonctions de l'API mysql ont un équivalent mysqli, le plus souvent avec un nom et un fonctionnement similaire. La principale différence est la connexion à ajouter en paramètre qui était facultative (et jamais utilisée) dans l'API mysql et qui est nécessaire en mysqli.
    mysql_​connect mysqli_connect
    mysql_​query mysqli_query()
    mysql_​fetch_​assoc mysqli_fetch_assoc()

    Mention spéciale pour mysql_​list_​tables, qui n'a pas d'équivalent. Cependant, tu peux exécuter la requête SQL SHOW TABLES FROM <le nom de la base> manuellement et lire le résultat (d'ailleurs il y a un exemple dans la doc pour illustrer ce que faisait la fonction)

    Sinon, tu peux réécrire complètement ton script avec PDO.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre éclairé Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Par défaut
    Oui d'ailleurs la différence entre PDO et MySQLi est ... dur à cerner pour un néophyte comme moi.

    J'ai choisi MySQLi justement car le code me parlait plus.

    Bref, en tout cas, ce code n'abime pas mes BDDs.

    Je vais ESSAYER de faire la migration en MySQLi, mais c'est pas gagné... ;-)

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Hum... Pour faire simple :
    L'API mysqli est le successeur de l'API mysql : davantage de fonctionnalités (le support des requêtes préparées notamment), une implémentation objet en plus des fonctions procédurales, mais ça reste fondamentalement limité à MySQL
    PDO est une couche d'abstraction pour accéder aux bases de données, sans restriction sur le SGDB (du moment qu'il existe un pilote) En gros, que tu interroges une base MySQL, Oracle ou SQL-Server, le code PDO est sensiblement le même (sauf la ligne de connexion et les éléments spécifiques dans les requêtes)

    Métaphoriquement, l'API mysql est un tournevis, MySQLi est un tournevis à cliquet à tête fixe et PDO est une visseuse-dévisseuse dont tu peux changer la tête.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Celira Voir le message
    Métaphoriquement, l'API mysql est un tournevis, MySQLi est un tournevis à cliquet à tête fixe et PDO est une visseuse-dévisseuse dont tu peux changer la tête.
    Celira, alias Bricol'Girl !!



    Cela dit, il faut choisir PDO.
    Sans hésiter.

  6. #6
    Membre éclairé Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Par défaut
    Déjà que je m'enquiquine à migrer ce site MySQL à MySQLi... Alors PDO... Heu... L'année prochaine...

  7. #7
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Celira, alias Bricol'Girl !!
    Ah ouais !! J'imagine toutafé


    En plus des forums DVP, vous pouvez retrouver Celira dans les rayons bricolage de bon nombre d'enseignes

  8. #8
    Invité
    Invité(e)
    Par défaut
    @rawsrc
    Je constate qu'on regarde les mêmes émissions de bricolage



    @Casio
    Grave erreur.... Tu crois gagner du temps, mais c'est tout le contraire.

  9. #9
    Membre éclairé Avatar de Casio
    Homme Profil pro
    Historien numérique
    Inscrit en
    Novembre 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Historien numérique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 312
    Par défaut
    @jreaux62 : Vous savez mieux quiconque ici cher ami que je suis noyé depuis des lustres sur la migration de notre site.
    Si à chaque fois que je termine une migration, il faut en faire une autre, je fais ça full-time... Déjà que...

  10. #10
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    @rawsrc
    Je constate qu'on regarde les mêmes émissions de bricolage
    C'est là que tu te rends compte que (le physique de) la prof est vachement importante

  11. #11
    Invité
    Invité(e)
    Par défaut
    Justement, choisir MySQLi, c'est se planter * une grosse épine dans le pied...

    Passe directement à PDO !
    On te le dit depuis le début !


    * Demande à Bricol'Girl ! C'est elle qui tient le marteau !

  12. #12
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    Citation Envoyé par Casio Voir le message
    Salutations,

    Depuis des années, j'utilise un script qui nous avait été donné par un ancien webmaster, pour nettoyer nos BDDs MySQL :
    Je reviens à tes moutons après ce bref interlude...
    Ta base de données est si grosse qu'elle tourne au ralenti et qu'il faille la nettoyer ?
    Combien de téraoctets elle fait ?

    J'ai bossé sur des bases de données MySql de plusieurs centaines de gigas et jamais eu de ralentissements à vrai dire.

  13. #13
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    @casio : rawsrc a raison de poser la question : il n'est peut-être pas nécessaire que tu te prennes la tête à migrer le script si en fait l'optimisation de la base n'est pas utile.

    @jreaux et rawsrc : ah oui, quand même, vous en avez des références
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  14. #14
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 416
    Par défaut
    Citation Envoyé par Casio Voir le message

    - Première question : Ce script est-il toujours utile d'après vous ?
    - Deuxième question : Comment le moderniser pour déjà le passer en MySQLi ?

    Merci de vos aides...
    C'est pour "défragmenter" tes tables. Je sais pas si c'est toujours utile, j'ai l'impression qu'il y a maintenant des routines automatiques côté sgbdd car j'ai fait ce même genre de script il y a longtemps et je n'observe maintenant que des petites pertes de temps à autre.

    A mon avis, c'est vraiment pas urgent et pas indispensable mais si tu veux j'ai le code déjà fait en pdo. Ce serait quand même mieux d'apprendre pdo sur autre chose de plus utile, je ne sais pas si je vais laisser ces scripts d'optimisation sur mes sites, tout le monde s'en fou et ça marche aussi bien si on l'oublie. Peut-être dans des cas très particuliers... j'en doute.

    Et puis il y a l'équivalent dans phpMyadmin, donc si tu y a accès tu peux toujours le faire par ce biais en cas de réel besoin.

  15. #15
    Invité
    Invité(e)
    Par défaut
    @Celira

    Pour infos, ce sont des vidéos réalisées (et commentée en voix off) par Alain Chabat (Les Nuls) !!
    (ça date de 1999 !)

    C'est quasiment "cultissime", pour ceux qui aiment.... le bricolage !
    De quoi exciter susciter des vocations...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Passer un script de mysql à mysqli
    Par piluche dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 21/08/2017, 10h36
  2. [MySQL] Passer de MySQL à MySQLi
    Par InspLVD dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 11/12/2015, 21h31
  3. Passer de mysql à mysqli
    Par matmoiça dans le forum MySQL
    Réponses: 1
    Dernier message: 05/08/2015, 16h20
  4. [MySQL] Passer de mysql à mysqli
    Par luccieditor dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 14/05/2014, 18h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo