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

Résolu
admindunet Messages postés 127 Date d'inscription   Statut Membre Dernière intervention   -  
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   -
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


A voir également:

1 réponse

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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