Sélectionner les lignes quelque soit le contenu d'une colonne [Résolu]

Signaler
Messages postés
99
Date d'inscription
mardi 1 septembre 2015
Statut
Membre
Dernière intervention
15 mai 2021
-
Messages postés
32478
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 mai 2021
-
Bonjour,

J'utilise le code ci-dessous pour sélectionner les lignes selon le choix :


$resultat=$conn->prepare("select * from matable WHERE id=:leid and chir=:chir and val=:val and annule=:annule order by date desc");
      $resultat->execute(array('leid' => $_SESSION['idutilisateur'], 'chir'=>$chir, 'val'=>$val, 'annule'=>$annule));


Mon problème est que parfois je dois choisir anything pour l'une des colonnes where, par exemple :

Si la table est ronde alors chir = 1, sinon chir ne doit pas être prise au compte dans le select (chir doit être anything), et ce test je le dois le faire pour tout le reste des colonnes dans where (val, annule).

J'ai lu qu'il faut mettre where le nom de la colonne = le nom de la colonne
J'ai donc fait (si la table = ronde donc $chir= 1; sinon $chir='chir';
mais ceci ne donne rien il exécute ça comme ci je cherche le contenu texte "chir" dans la colonne chir.
Pouvez vous m'aider svp ?
merci.


EDIT : Ajout du LANGAGE dans les balises de code pour avoir la coloration syntaxique

Configuration: Windows / Chrome 90.0.4430.93


1 réponse

Messages postés
32478
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 mai 2021
3 490
Bonjour

Je t'invite plutôt à le gérer comme ça :
$datas = [];
$sql = "SELECT * FROM matable WHERE 1=1 ";

if(!empty( $_SESSION['idutilisateur'] ) {
  $leid =  $_SESSION['idutilisateur'];
  $datas[':leid'] = $leid ;
  $sql .= " AND id=:leid ";
}

if(!empty( $chir ) {
  $datas[':chir'] = $chir ;
  $sql .= " AND chir=:chir ";
}

if(!empty( $val ) {
  $datas[':val'] = $val ;
  $sql .= " AND val=:val ";
}

if(!empty( $annule ) {
  $datas[':annule'] = $annule ;
  $sql .= " AND annule=:annule ";
}

$sql .= "  ORDER BY date desc ";

try{
  $resultat=$conn->prepare($sql);
  $resultat->execute($datas);
}catch(Exception $e){
  echo " ERREUR : " . $e->getMessage(); // en cas de pb dans la requête
}