Erreur requête SQL avec WHERE [Résolu]

Signaler
Messages postés
245
Date d'inscription
mercredi 1 juin 2016
Statut
Membre
Dernière intervention
24 août 2020
-
Messages postés
29617
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 septembre 2020
-
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

Messages postés
29617
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 septembre 2020
2 800
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);


Cordialement,
Jordane
Messages postés
29617
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 septembre 2020
2 800
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 ) {

Messages postés
245
Date d'inscription
mercredi 1 juin 2016
Statut
Membre
Dernière intervention
24 août 2020
19
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 ..
Messages postés
29617
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 septembre 2020
2 800 >
Messages postés
245
Date d'inscription
mercredi 1 juin 2016
Statut
Membre
Dernière intervention
24 août 2020

Et oui... c'est bien ce que je disais.
Pense à mettre le sujet en résolu.
Messages postés
245
Date d'inscription
mercredi 1 juin 2016
Statut
Membre
Dernière intervention
24 août 2020
19 >
Messages postés
29617
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 septembre 2020

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
Messages postés
29617
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 septembre 2020
2 800 >
Messages postés
245
Date d'inscription
mercredi 1 juin 2016
Statut
Membre
Dernière intervention
24 août 2020

Reli ma réponse.. je t'ai déjà donné la solution