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ête contenant des "


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 300
    Par défaut Requête contenant des "
    Hello!
    Joyeuses pâques

    J'ai un petit soucis avec une fonction contenant une requête. Je dois insérer des ".

    Dans une requête qui commence par cela aussi. Bref du code vaudra mieux que mes explications :
    Code php : 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
        public function findAllEmargementsPassesParCours($em, $utilisateurProf, $idCours, $idCreneau)
        {
          return $em->createQuery(
            "SELECT p.prof, u.nomUtilisateur, u.prenomUtilisateur, c.nomUe, w.plageHoraire, d.dateCours, 
            u.id, f.nomFormation, po.datePointageEntree, po.partiEnAvance, po.dureePointage, po.datePointageSortie
            FROM App\Entity\CoursHoraires h
            INNER JOIN App\Entity\Cours c
            JOIN App\Entity\ProfCours p
            JOIN App\Entity\Utilisateur u
            JOIN App\Entity\PlageHoraire w
            JOIN App\Entity\DateCours d
            JOIN App\Entity\Formation f
            JOIN App\Entity\Pointage po
            WHERE h.plageHoraire = w.id
            AND h.cours = c.id
            AND c.id = p.cours
            AND c.id = '".$idCours."'
            AND w.id = '".$idCreneau."'
            AND h.dateCours = d.id
            AND u.formation = f.id
            AND u.formation = po.formation
            AND u.roles = '"["ROLE_USER"]"'
            "
            )->getResult();
        }
    En effet ma requête en définie entre des "
    Et je souhaite avoir la contrainte
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    u.roles = '"["ROLE_USER"]"'
    Que je mette des ", ', ou les 2 : "' ou encore '", bref je n'ai pas réussis à faire tourner ce truc. Une idée?
    Merci

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 513
    Par défaut
    Et si tu échappes les double quotes (") par un anti-slash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    u.roles = '\"["ROLE_USER"]\"'

  3. #3
    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 : 49
    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,

    l'autre solution c'est d'utiliser la notation heredoc et il ne faut SURTOUT PAS faire les jonctions dans la clause WHERE mais dans la clause FROM qui est prévue pour.
    Je pense que ta requête est incomplète, j'ai essayé de la reprendre mais il me manque un bout :
    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
    $sql = <<<sql
    SELECT p.prof, u.nomUtilisateur, u.prenomUtilisateur, c.nomUe, w.plageHoraire, d.dateCours, 
            u.id, f.nomFormation, po.datePointageEntree, po.partiEnAvance, po.dureePointage, po.datePointageSortie
      FROM 
           App\Entity\CoursHoraires h
           JOIN App\Entity\PlageHoraire  w ON w.id = h.plageHoraire
           JOIN App\Entity\DateCours     d ON d.id = h.dateCours
           JOIN App\Entity\Cours         c ON c.id = h.cours
               JOIN App\Entity\ProfCours p ON p.cours = c.id
                  
           JOIN App\Entity\Utilisateur   u ON u.formation  = /** ICI IL MANQUE UN BOUT */
               JOIN App\Entity\Pointage po ON po.formation = u.formation
               JOIN App\Entity\Formation f ON f.id         = u.formation
     WHERE 
           c.id = {$idCours}
           AND w.id = {$idCreneau}
           AND u.roles = '["ROLE_USER"]'
    sql;

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- Le minimum est d'utiliser :


    2- Mais la VRAIE bonne solution est d'utiliser des requêtes préparées.

    Ce n'est pas la 1ère fois qu'on te le dit...

  5. #5
    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 : 49
    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
    on peut raisonnablement penser que ses deux variables $idCours et $idCreneau soient des entiers.
    Mais cela n'empêche qu'il faut quand même soit les caster proprement soit les typer correctement.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Rien n'empêche de mettre ["ROLE_USER"] dans une variable $role = '["ROLE_USER"]';, et de la passer dans les paramètres de la requête préparée.

    Sinon, je pense que l'échappement correct est :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    "...
    u.roles = '[\"ROLE_USER\"]'
    ..."

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

Discussions similaires

  1. Variable contenant des quotes
    Par Laurinette57 dans le forum SAS Base
    Réponses: 1
    Dernier message: 18/05/2015, 10h26
  2. Optimisation d'une requête contenant des sous-requêtes
    Par Christophe Charron dans le forum Requêtes
    Réponses: 2
    Dernier message: 28/06/2010, 15h34
  3. Requête contenant des variables aléatoires
    Par manucha dans le forum SQL
    Réponses: 3
    Dernier message: 16/09/2009, 15h52
  4. Exporter 1 requête contenant des champs calculés vers Excel
    Par MaryR dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 08/09/2009, 19h54
  5. Probléme avec requétes contenant des caractéres spéciaux
    Par dragonfly dans le forum Requêtes
    Réponses: 1
    Dernier message: 08/11/2007, 17h20

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