Contruction d'une requete personnalisable
Grafiteur
-
Grafiteur -
Grafiteur -
Bonjour,
je voudrais construire une requête SQL personnalisé via PHP
voilà ce que j'ai fais :
C'est la première fois que j'utilise le potentiel des elseif, du coup je me demandais si mon code était ok.
Sachant que la problématique c'est de savoir si on commence par 'WHERE' ou 'AND' selon si on commence ou non. Je pouvais faire très simple, mais le but reste d'optimiser le code, donc je suis à le recherche d'idées afin de progresser.
En même temps je peux m'en servir comme modèle car j'ai quelques autres recherche dans ce genre à produire
Merci pour votre aide :)
je voudrais construire une requête SQL personnalisé via PHP
voilà ce que j'ai fais :
function rechercheJeu($nomJeu, $pegi, $date1, $date2, $choix) { $Requete_recherche = 'SELECT * FROM JEU '; if (!($nomJeu == null)) { $Requete_recherche += 'WHERE nomJeu = ' . $nomJeu . ' '; $nomJeu = null; } elseif (!($pegi == null)) { $Requete_recherche += 'WHERE pegi = ' . $pegi . ' '; $pegi = null; } elseif (!($date1 == null) && !($date2 == null)) { $Requete_recherche += 'WHERE dateSortie BETWEEN ' . $date1 . ' AND ' . $date2 . ' '; $date1 = null; $date2 = null; } else return; if (!($pegi == null)) $Requete_recherche += 'AND pegi <' . $pegi . ' '; if (!($date1 == null) && !($date2 == null)) $Requete_recherche += 'AND dateSortie BETWEEN ' . $date1 . ' AND ' . $date2 . ' '; if (!($choix == null)) $Requete_recherche += 'ORDER BY ' . $choix; // choix colonne + ASC ou DESC $Requete_recherche += ';'; return $Requete_recherche; };
C'est la première fois que j'utilise le potentiel des elseif, du coup je me demandais si mon code était ok.
Sachant que la problématique c'est de savoir si on commence par 'WHERE' ou 'AND' selon si on commence ou non. Je pouvais faire très simple, mais le but reste d'optimiser le code, donc je suis à le recherche d'idées afin de progresser.
En même temps je peux m'en servir comme modèle car j'ai quelques autres recherche dans ce genre à produire
Merci pour votre aide :)
A voir également:
- Contruction d'une requete personnalisable
- Erreur lors de l'envoi de la requête facebook - Forum Facebook
- Erreur de requete facebook - Forum Facebook
- Quelle requête écrire pour demander au moteur de recherche de présenter de préférence les pages web traitant de tennis mais pas de tennis de table ✓ - Forum Java
- L'opérateur ou l'administrateur a refusé la requête ✓ - Forum Windows
- Créer un blog gratuit personnalisable - Guide
2 réponses
Si tu veux gérer plusieurs conditions de manière variable tu peux faire un truc tu genre :
$Conditions=array(); if(...) $Conditions[]='NomJeu=...'; if(...) $Conditions[]='....'; if(count($Conditions)>0) $Sql.='WHERE '.implode(' AND ',$Conditions)
Bonjour,
En complément de la réponse de Nhenry
revient plus simplement à
Idem pour les autres...
Et les différents IF proposés par NHENRY peuvent s'écrire plus proprement via l'écriture ternaire :
NB: Attention à l'utilisation des QUOTES pour entourer les "string".
NB² : La création d'une requête de cette façons ne te permettra pas d'utiliser les requêtes préparées de PDO (ce qui est fort dommage vu ce que ça amène en terme de sécurisation des données...) mais c'est toi qui vois.
Cordialement,
Jordane
En complément de la réponse de Nhenry
if (!($nomJeu == null)) {
revient plus simplement à
if($nomJeu){
Idem pour les autres...
Et les différents IF proposés par NHENRY peuvent s'écrire plus proprement via l'écriture ternaire :
$Conditions=array(); $Conditions[]= $nomJeu ? "NomJeu='$nomJeu'" : ''; $Conditions[]= $pegi? "pegi='$pegi'" : ''; //etc...
NB: Attention à l'utilisation des QUOTES pour entourer les "string".
NB² : La création d'une requête de cette façons ne te permettra pas d'utiliser les requêtes préparées de PDO (ce qui est fort dommage vu ce que ça amène en terme de sécurisation des données...) mais c'est toi qui vois.
Cordialement,
Jordane
Mais si je fais via écriture ternaire, le tableau conditions va se remplire même si ma valeur est null, je risque d'avoir une requete comme ça :
Il va pas y avoir un probléme avec l'exécution de la requête ?
$nomJeu= null; $pegi = 1; $Conditions=array(); $Conditions[]= $nomJeu ? "NomJeu='$nomJeu'" : ''; $Conditions[]= $pegi? "pegi='$pegi'" : ''; $Sql = 'SELECT * FROM JEU '; if(count($Conditions)>0) $Sql.='WHERE '.implode(' AND ',$Conditions); return $Sql; => SELECT * FROM JEU WHERE AND pegi='1'
Il va pas y avoir un probléme avec l'exécution de la requête ?
Au temps pour moi... j'ai oublié d'indiqué qu'avant de faire le IMPLODE tu peux faire un array_filter pour supprimer les "vides"
https://www.php.net/array_filter
https://www.php.net/array_filter