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 :

Prise en compte variable dans requête


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de Raptor92
    Homme Profil pro
    Directeur des opérations & Innovation
    Inscrit en
    Juin 2009
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur des opérations & Innovation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 970
    Points : 766
    Points
    766
    Par défaut Prise en compte variable dans requête
    Bonjour,

    Dans la requête suivante, j'ai une variable dite "UVC", mon soucis est que la requête de s'exécute pas, si je la remplace par le code, la couleur et la taille, cela fonctionne.
    J'imagine donc que mon souci provient de du / mais je ne vois pas comment résoudre le problème.

    Auriez vous une idée svp
    Merci beaucoup

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE CMD_LIGNE SET LIG_ART_QTY= '1' WHERE LIG_UVC = '251876426C\36' AND LIG_NUM_CMD = '3050-00000001'

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 243
    Points : 8 522
    Points
    8 522
    Billets dans le blog
    17
    Par défaut
    Il doit y avoir un problème d'échappement du \ (il faut penser à l'échapper pour SQL et peut-être aussi pour PHP).
    Donne-nous un exemple exécutable qu'on puisse tester, ce qu'il affiche de ton côté, et le message d'erreur obtenu.

    $val = 'foo\bar'; // Ta valeur
    $sql = 'UPDATE ... WHERE ... {$val} ...';
    echo $sql; // Debug
    $pdo->exec($sql);
    print_r($pdo->errorInfo());

  3. #3
    Membre éclairé Avatar de Raptor92
    Homme Profil pro
    Directeur des opérations & Innovation
    Inscrit en
    Juin 2009
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur des opérations & Innovation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 970
    Points : 766
    Points
    766
    Par défaut
    Bonjour,

    Merci pour ton aide, voici un code qui fonctionne parfaitement

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE CMD_LIGNE SET LIG_ART_QTY= '1' WHERE LIG_ART_CODE ='251876' AND LIG_ART_COLOR ='BLACK' AND LIG_NUM_CMD = '3050-00000001' AND LIG_ART_TAILLE ='36'

    Le soucis est que je fais appel à 3 variable au lieu d'une.
    Merci

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 243
    Points : 8 522
    Points
    8 522
    Billets dans le blog
    17
    Par défaut
    Tu ne réponds pas à ma demande. Tant pis et bon courage.

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 347
    Points : 39 749
    Points
    39 749
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Citation Envoyé par Raptor92 Voir le message
    Le soucis est que je fais appel à 3 variable au lieu d'une.
    Ce qui doit piloter la décision, c'est d'une part la validité du résultat : met on à jour toutes les lignes souhaitées et uniquement celles souhaitées, et d'autre part la performance de la requête.
    C'est sur ce deuxième point que j'ai des doutes, une restriction sur la couleur et sur la taille sera toujours moins performante qu'une restriction sur un numéro de commande et un numéro de ligne qui constituent probablement la PK de la ligne de commande.
    Votre première requête semble de ce point de vue bien meilleure, reste à résoudre la difficulté liée au caractère spécial, répondez à la question de Séb pour que la version optimisée de la requête soit celle retenue et non pas une version dégradée et contre performante.

  6. #6
    Membre éclairé Avatar de Raptor92
    Homme Profil pro
    Directeur des opérations & Innovation
    Inscrit en
    Juin 2009
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur des opérations & Innovation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 970
    Points : 766
    Points
    766
    Par défaut
    Bonjour,

    Je ne dois pas comprendre ce que tu demandes, cette requête fonctionne et pour la première, je n'ai aucun message d'erreur, juste 0 ligne affectée.
    Mais j'ai finalement opté pour le remplacement de l'UVC par un code barre, et cela fonctionne

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT LIG_NUM_CMD,LIG_ART_CODE,LIG_ART_LIBELLE,LIG_ART_COLOR,LIG_BARRECODE,LIG_ART_TAILLE,LIG_ART_QTY FROM CMD_LIGNE WHERE  LIG_ART_CODE="' . $_POST['artcode'] . '" ORDER BY LIG_ART_COLOR,LIG_ART_TAILLE

    Il m'intéresse malgré tout d'aller au bout de ce problème et de savoir pourquoi le \ ne fonctionne pas

    Voici la requête update:

    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
    <?php
     
    require_once('../connexion/recConnexion.php');
     
     
    try {
        $dbco = new PDO("mysql:host=$servname;dbname=$dbname", $user, $pass);
        $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
       $sql = ("UPDATE CMD_LIGNE SET LIG_ART_QTY= '" . $_POST['qty'] . "' WHERE LIG_BARRECODE = '" . $_POST['cb']  . "' AND LIG_NUM_CMD = '" . $_POST['numcmd'] . "' ");
       $dbco->exec($sql);
     
       $dbco->exec($sql);
       echo 'Data modifié avec succès !';
    } catch (PDOException $e) {
       echo "Erreur : " . $e->getMessage();
    }
     
    ?>
    Merci

  7. #7
    Membre éclairé
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 362
    Points : 738
    Points
    738
    Par défaut
    Bonjour,

    Puisque tu utilises PDO, tu peux utiliser la méthode PDO::quote() pour échapper correctement tes paramètres dans ta requête sql : https://www.php.net/manual/fr/pdo.quote.php
    Une autre solution est d'utiliser correctement les requêtes préparées avec des marqueurs : https://www.php.net/manual/fr/pdo.pr...statements.php

    Au passage, n'utilise pas de try/catch dans ton code si tu ne gères pas les exceptions PDO : le message d'erreur sera automatiquement affiché en développement (display_errors ON) et logué en production (display_errors OFF).
    Avec ton try/catch actuel, le message d'erreur sera affiché même en production et celui-ci risque d'afficher des informations sensibles.
    https://www.julp.fr/blog/posts/43-my...e-un-try-catch

Discussions similaires

  1. [VBA] [XiR2] Modifier une formule de variable dans un rapport ?
    Par ctobini dans le forum SDK
    Réponses: 2
    Dernier message: 22/03/2009, 17h41
  2. [BO v6.5.1] - formules de variables
    Par elfyx dans le forum Deski
    Réponses: 16
    Dernier message: 17/04/2008, 16h18
  3. [VBA] Formule avec variables
    Par tuzoenduro dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 18/02/2008, 17h40
  4. Formule et variable (déplacé forum vba)
    Par choupinette370 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/11/2007, 23h08
  5. écriture d'une formule avec "variable"
    Par stephane31 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/08/2007, 16h48

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