Erreur requête SQL avec WHERE

Résolu
CorentinRoche Messages postés 287 Statut Membre -  
jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Petit soucis j'essaye de faire une requête SQL avec un WHERE REF_client = $donnees_client['REF_client']

Lorsque je fait la requête manuellement c'est a dire de cette manière :
$recup_facture_client = $bdd->query('SELECT * FROM Factures WHERE REF_client = CorentinROCHE');

Ça fonctionne !

Mais lorsque je veux utiliser ça :
$recup_facture_client = $bdd->query('SELECT * FROM Factures WHERE REF_client = '. $donnees_client['REF_client'] .'');


voici l'erreur :
<b>Fatal error</b>:  Uncaught PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'CorentinROCHE' in 'where clause' in /var/www/html/Gestion MSID/visualiser-un-client-part.php:153
Stack trace:
#0 /var/www/html/Gestion MSID/visualiser-un-client-part.php(153): PDO->query('SELECT * FROM F...')
#1 {main}
  thrown in <b>/var/www/html/Gestion MSID/visualiser-un-client-part.php</b> on line <b>153</b><br />


le code complet :
                    <tbody>
                        <?php
                            if(!empty($arr_donnees_client)){
                              foreach($arr_donnees_client as $donnees_client ){
                                $recup_facture_client = $bdd->query('SELECT * FROM Factures WHERE REF_client = '. $donnees_client['REF_client'] .'');
                              }
                            }                                               
                           while($donnees_facture_client = $recup_facture_client->fetch()) {
                        ?>                                          
                          <tr>
                              <td><?php echo $donnees_facture_client['REF_facture']; ?></td>
                              <td><?php echo $donnees_facture_client['dat_e']; ?></td>
                              <td><?php echo $donnees_facture_client['montant']; ?> €</td>
                              <td class="<?php if($donnees_facture_client['statut'] == "Payée"){echo "process";}else{echo "denied";} ?>"><?php echo $donnees_facture_client['statut']; ?></td>
                          </tr>
                        <?php
                            }
                        ?>                                              
                    </tbody>


Un echo $donnees_client['REF_client']; me retourne bien proprement : CorentinROCHE

Je comprend que dans l'erreur la requête ne trouve pas la colonne 'CorentinROCHE"' alors que c'est la colonne REF_Client qui est concerner .....

Pour info voici la table SQL:

Cordialement,
Roche Corentin

1 réponse

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour,

    Dans les deux exemples que tu nous donnes ta requête est fausse et ne peut pas fonctionner....
    Il te manque des quotes autour de la valeur...

    A corriger par
    $sql = 'SELECT * 
               FROM Factures 
               WHERE REF_client = "'. $donnees_client['REF_client'] .'"'
    $recup_facture_client = $bdd->query($sql);
    


    1
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Et vu que tu fais du PDO, au lieu de faire du query .. je t'invite à utiliser d'avantage les requêtes préparées. (histoire de mettre un peu plus de sécurité dans ton code...)
      $sql = 'SELECT * 
                 FROM Factures 
                 WHERE REF_client = :ref ',
      $datas = array(':ref'=>  $donnees_client['REF_client'] );
      
      
      //Execution de la requete
      try{
        $requete = $bdd -> prepare($sql) ;
        $requete->execute($datas) ;
         $recup_facture_client =  $requete->fetchAll(); // on stocke le résultat dans un array
         // $recup_facture_client =  $requete->fetch(); // ou un simple fetch si tu n'attends qu'une seule réponse
      }catch(Exception $e){
        // en cas d'erreur :
         echo " Erreur ! ".$e->getMessage();
         echo " Les datas : " ;
        print_r($datas);
      }
      
      


      et dans ce cas, remplacer ton while par un foreach
      foreach( $recup_facture_client as $donnees_facture_client ) {
      
      
      0
    2. CorentinRoche Messages postés 287 Statut Membre 41
       
      Bonjour, merci de la réponse

      ça fonctione bien maintenant en rajoutant les quotes.

      Effectivement ce n’était pas ça :
      $recup_facture_client = $bdd->query('SELECT * FROM Factures WHERE REF_client = CorentinROCHE');

      Mais ça :
       $recup_facture_client = $bdd->query('SELECT * FROM Factures WHERE REF_client = 'CorentinROCHE'');

      Quand ma requête fonctionner ..
      0
      1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > CorentinRoche Messages postés 287 Statut Membre
         
        Et oui... c'est bien ce que je disais.
        Pense à mettre le sujet en résolu.
        0
      2. CorentinRoche Messages postés 287 Statut Membre 41 > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Juste dernière question comment j'utilise la requête préparer avec un fetchAll ?

        Pour un fetch classique je fait juste un écho de la requête préparer->fetch()

        Mais pour un fetchall ?

        Mon but et de pouvoir faire du
        echo $donnees_facture_client['REF_facture'];
        et
        echo $donnees_facture_client['montant''];

        Dans un tableau qui va m'afficher toutes les factures d'un client.

        Merci encore
        0
      3. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > CorentinRoche Messages postés 287 Statut Membre
         
        Reli ma réponse.. je t'ai déjà donné la solution
        0