Sélectionner les lignes quelque soit le contenu d'une colonne

Résolu/Fermé
admindunet Messages postés 115 Date d'inscription mardi 1 septembre 2015 Statut Membre Dernière intervention 2 décembre 2021 - Modifié le 27 avril 2021 à 20:18
jordane45 Messages postés 36588 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 30 novembre 2022 - 27 avril 2021 à 20:25
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

jordane45 Messages postés 36588 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 30 novembre 2022 4 415
27 avril 2021 à 20:25
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
}

1