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 :

Requêtes SQL et constantes


Sujet :

PHP & Base de données

  1. #1
    Membre régulier Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Points : 105
    Points
    105
    Par défaut Requêtes SQL et constantes
    Bonjour.

    Je fais analyser mon code (PHP) par SonarQube depuis peu. Je me prends tout un paquet de "Code smells" "Define a constant instead of duplicating this literal "xxx" n times", où "xxx" est en général le nom d'une colonne de ma base de données.
    Auriez-vous des bonnes pratiques pour éviter ce genre d'alertes ? J'hésite à définir une constante dans mon code pour les noms de toutes les tables et toutes les colonnes de la base.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    le code d'une requête n'a rien à voir avec le code d'un langage de dev. L'optimiseur se chargera de factoriser... !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre régulier Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Points : 105
    Points
    105
    Par défaut
    En fait ce n'est pas tant le code de la requête que SonarQube pointe, mais l'utilisation de chaînes de caractères pour récupérer les résultats.
    Par exemple, si je récupère les nom et prénom (champs Per_Nom et Pre_Prenom) de personnes via une requête SQL (ici en PHP)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sRqtPer = "SELECT * FROM personnes WHERE Per_Id=:iIdListe";
    $oPdsResPer = $oPdoCnxBD_L->prepare($sRqtPer, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
    $oPdsResPer->execute(array(':iIdListe' => $iIdListe)
    $aUtilisateurs = $oPdsResPer->fetchAll();
    SonarQube râle si j'utilise plus de 2 fois $aUtilisateurs['Per_Nom'] ou $aUtilisateurs['Per_Prenom'].
    La règle en question : https://rules.sonarsource.com/php/ty...earch=constant

  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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    L'idée sous-jacente de la règle dans SonarCube est que si tu utilises une valeur constante, c'est qu'il y a une notion fonctionnelle (ou éventuellement technique) derrière. Utiliser des constantes te permet de différencier par exemple entre "20" le nombre maximum d'éléments à afficher dans un tableau et "20" la longueur maximale d'un pseudo. ça facilite aussi grandement l'existence si la valeur constante en question doit changer : tu changes à un endroit et pouf ! magie ! toute l'application est à jour. En reprenant l'exemple précédent, si tu dois modifier la taille max d'un tableau de 20 à 25 et que tu as écrit en dur "20" dans chaque script qui construit un tableau, ça va vite devenir casse-pied...

    Dans ton cas, il s'agit d'un nom de colonne dans la base. Utiliser une constante te permet donc de gérer le cas où la colonne est renommée en base (et accessoirement d'éviter de te prendre le chou parce que tu as écrit $aUtilisateurs['Pre_Nom'] et que tu ne comprends pas pourquoi le nom reste vide )

    Bon évidemment, si tu renommes les colonnes en base, tu vas de toute façon devoir te farcir les fichiers pour modifier le code des requêtes proprement dites (sauf si tu utilises un ORM type Doctrine qui écrit les requêtes pour toi, mais ceci est une autre histoire)
    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
    Membre régulier Avatar de scrouet
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    280
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 280
    Points : 105
    Points
    105
    Par défaut
    Merci pour cette réponse. Je pense configurer toutes mes constantes liées à la base de données dans un seul fichier.

Discussions similaires

  1. ajout de constante dans requête sql
    Par ivanka dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/03/2011, 10h58
  2. [ DB2 ] [ AS400] requête sql
    Par zinaif dans le forum DB2
    Réponses: 6
    Dernier message: 23/08/2008, 19h42
  3. Constante Date dans une requête SQL
    Par tarbala dans le forum Autres SGBD
    Réponses: 1
    Dernier message: 25/04/2006, 16h24
  4. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  5. Requête SQL
    Par Leludo dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/02/2003, 16h44

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