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 :

Conversion automatique en float mysql vers php et vice versa [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2014
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2014
    Messages : 253
    Points : 164
    Points
    164
    Par défaut Conversion automatique en float mysql vers php et vice versa
    Bonjour,

    Connaissant la grande souplesse du langage php et le système d'auto gestion des types des variables , assez performant d'ailleurs, quelles sont les précautions à prendre lorsque l'on manipule avec php des chiffres à la fois depuis une base de données MYSQL (requètes en php), des chiffres saisis par un utilisateur depuis un formulaire et des chiffres de variables php ?

    J'ai tendance à systématiser une conversion (parfois inutile mais au moins sans ambiguité) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $resultat_numerique=floatval($chiffre_stringoufloat_venant_de_requete_mysql)*floatval($donnee_saisie_utilisateur_web)*floatval($variable_php_sans_typage_explicite);
    Comme ce type de calcul se répète de nombreuses fois dans mon script, j'imagine que forcer une conversion floatval() peut ralentir le programme sensiblement même si le type de la variable est déjà un float.

    Savez vous dans quels cas cette conversion n'est absolument pas nécessaire et ne le sera certainement jamais ?

  2. #2
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Plus compréhensible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $resultat_numerique=(float)$chiffre_stringoufloat_venant_de_requete_mysql*(float)$donnee_saisie_utilisateur_web*(float)$variable_php_sans_typage_explicite;
    C'est ce quon' appelle de la modification de type, du castage.

    Ce que je te conseillerai c'est de centraliser cette manière de parser tes variables.

    Pour parler plus simplement, dans le cas d'une saisie d'utilisateur, la première chose que tu fais quand tu recois ton formulaire, tu cast les variables dans le type qu'elle devrait être, idem après le résulat d'une requête SQL, quand tu fetch tes résultats.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2014
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2014
    Messages : 253
    Points : 164
    Points
    164
    Par défaut
    ok

    donc tu penses qu'il vaut mieux caster (float)($variable) plutôt que convertir ? floatval().

    Mais est ce indispensable tout le temps vues les conversions automatiques de php qui sont très logiques :

    http://www.php.net/manual/fr/languag...e-juggling.php

    Y a t il toujours ambiguïté si les types de données mysql sont systématiquement soit des entiers soit des décimaux ? est il nécessaire de caster les variables php de récupération des données ?

  4. #4
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    donc tu penses qu'il vaut mieux caster (float)($variable) plutôt que convertir ?
    Le résultat est totalement identique mais c'est plus lisible et d'une certaine manière plus logique (c'est prévu pour ça, donc autant faire comme ça).

    Mais est ce indispensable tout le temps vues les conversions automatiques de php qui sont très logiques :
    Ce n'est en aucun cas indispensable puisque comme tu l'as toi-même remarqué, PhP se débrouille pas trop mal pour tout ce qui est détermination de type (en même temps c'est clairement indispensable quand on est un language faiblement typé).

    Après ce n'est pas forcément une mauvaise idée pour toi en tant que développeur, car c'est très visuel, et tu sais qu'après castage, la variable est du type que tu l'as casté.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    est il nécessaire de caster les variables php de récupération des données ?
    Idem, en aucun cas indispensable, mais c'est pour toi, c'est plus visuel. Tu n'as plus à connaître ou aller vérifier le type de chaque colonne en bdd vu que c'est visuellement indiqué en face de toi.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2014
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2014
    Messages : 253
    Points : 164
    Points
    164
    Par défaut
    Effectivement cela me permet de visualiser plus rapidement, mais alourdit le programme.

    Après plusieurs recherches et test, je pense que tant que le programmeur écrit les nombres "normalement" entiers ou décimaux, aussi bien dans la base de données que dans son script, php sait gérer et reconnaître automatiquement le type des variables suivant leur utilisation ainsi aucune conversion ou castage n'est réellement nécessaire (sauf si c'est une volonté).

    ensuite est ce que caster les variables avant d'effectuer des opérations arithmétiques est plus rapide ? c'est peut être vrai dans certains cas lorsque les variables contiennent des données issus d'une base de données ou d'un formulaire et sont utilisées de nombreuses fois (qui doivent être normalement des string par défaut).


    Ce que je te conseillerai c'est de centraliser cette manière de parser tes variables.
    je pense que tu as raison cela éviterait des transtypages à répétition dans les boucles notamment et allège un peu le programme. une fonction dédiée au transtypage peut être nécessaire.

  6. #6
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Il ne faut vraiment pas penser en terme de performance, dans tous les cas l'impact est grandement négligeable, c'est de l'ordre de quelques millièmes de secondes tout au plus étant donné que le temps que tu vas gagner à comparer deux int plutôt qu'un int et une string, tu vas le perdre quand tu casteras ta string en int.

    C'est vraiment en terme de lisibilité, maintenabilité et facilité d'écriture du code qu'il faut penser.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2014
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2014
    Messages : 253
    Points : 164
    Points
    164
    Par défaut
    oui tout à fait.
    mais avec des programmes où l'on a plusieurs milliers de valeurs issues de mysql et des données de formulaires, et à chaque ligne mysql, 5 ou 6 opérations dans le script php, il est peut être plus rapide de transtyper toutes les variables en float le plus tôt possible surtout si les nombres sont importants (genre 1000000 ou plus...). Même si l'importance de cette optimisation reste à démontrer c'est quand même vrai je pense.

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

Discussions similaires

  1. Liste MySQL vers PHP, commet récupérer le POST ?
    Par wongounay dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 26/02/2013, 00h51
  2. [MySQL] MySQL vers PHP
    Par autre dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/07/2011, 09h33
  3. de php/mysql vers php/firebird
    Par omar24 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 22/02/2011, 11h46
  4. de php/Mysql vers php/access
    Par houdta dans le forum Langage
    Réponses: 1
    Dernier message: 21/08/2009, 14h14
  5. [PHP-JS] Encodage caractères MySQL vers PHP
    Par poubelle039 dans le forum Langage
    Réponses: 2
    Dernier message: 18/10/2007, 17h46

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