Erreur requête SQL avec WHERE

Résolu
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

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    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. Modérateur
      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 ) {
      
      
    2. 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 ..
    3. Modérateur
      @CorentinRocheEt oui... c'est bien ce que je disais.
      Pense à mettre le sujet en résolu.
    4. @jordane45Juste 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
    5. Modérateur
      @CorentinRocheReli ma réponse.. je t'ai déjà donné la solution