1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
// Imaginons, mais c'est une supposition comme dirait l'autre "purement hypothétique"
// qu'on doivent trouver des champs - très justement - nommés email_adh
// dans une table dont on connaitrait le nom avec une variable - elle aussi
// très justement nommée- $table. Imaginons ensuite qu'on ne cherche pas
// les lignes qui correspondent à un et un seul status mais bien à plusieurs
// status. Comme si par exemple, je demandais à un marchand quels sont
// les produits de son magasin qui coûtent 1, 2 ou 3 euros. Tu suis jusque là ?
// Bien ! Une variable scalaire, c'est à dire une variable dont le contenu
// n'est pas une série de valeurs - donc soit une chaîne de caractères
// soit un entier soit un nombre à virgule flottante soit un booléen - ne
// peut donc bien évidement pas convenir. Il va nous falloir utiliser une
// liste de valeurs, autrement dit, un tableau - encore qu'une instance
// d'une classe dérivée de ArrayIterator peut aussi bien faire l'affaire.
// C'est justement le but de la déclaration de la ligne ci-dessous que je vais
// m'efforcer d'éclaircir. Le premier caractère $ (dollar) suivi d'un nombre
// arbitraire de caractères alphanumériques commençant par une lettre
// forment ensemble une variable. Puis, pour des besoins de lisibilité évidents
// nous allons ajouter un espace suivi d'un caractère = (égal) qui va nous
// servir à initialiser notre variable avec une valeur. La directive array quand
// à elle va nous permettre de créer un tableau, ce qui nous est bien pratique
// car c'est justement ce qu'on veut avoir. En suivant les directives décrites
// dans le manuel de PHP relatif aux tableaux et à leur manipulation, on va
// définir trois valeurs, respectivement 1, 2 et 3. On aura au final créé une
// variable nommée 'status' qui contient un tableau de trois entrées, 1, 2 et 3.
// Je reconnais toute la difficulté de compréhension que cela peut nécessiter
// et les connaissances solides qu'il faut avoir pour comprendre ça.
$status = array(1,2,3);
// Sur le même principe que tout à l'heure, nous allons alors créer une
// nouvelle variables (cf le passage sur la déclaration des variables) nommée
// 'query' qui contrairement à sa soeur 'status' sera elle de type scalaire car
// elle caractérisera une chaine de caractères. Cette variable va nous servir
// à définir ce qu'on appelle "une requête SQL". SQL signifie Simple Query
// Langage et sert pour l'interaction entre notre script - le fichier que tu es
// en train d'écrire avec ton éditeur favori - et la base de données que je
// supposerai être MySQL. Un SGBD ou Système de Gestion de Bases
// de Données comme MySQL est un logiciel responsable de l'enregistrement
// de données selon un processus bien spécifique qu'on dit Relationnel. Par
// Relationnel on entends que les données sont "mises en relation" comme si
// par exemple je demandais à notre cher commerçant de tout à l'heure
// quels sont ses amis (ou Relations). C'est à dire qu'une donnée (notre
// commerçant) peut nous "mener" à d'autres données (ses amis).
// Dans notre exemple, la requête de séléction - notre morceau de
// code SQL que nous allons mettre dans la variable query - ne fais pas
// intervenir de relation (et dieu merci parce que je sens qu'on y passerait
// la nuit) mais simplement une séléction de données selon un critère dont
// nous verrons plus bas qu'il est défini dans la clause where. En PHP comme
// dans de nombreux autres langages comme Java ou C, les chaines de
// caractères sont déclarées à l'aide du caractère " (guillemets doubles)
// ou ' (guillemet) avec une spécificité qui nous intéresse fortement en ce
// moment: les variables qu'on insérera dans les chaines crées à l'aide
// de guillements doubles sont "interprétées" par PHP, ce qui signifie qu'elle
// seront in-fine remplacées par leur valeur. C'est justement ce qu'on
// fera à l'aide de notre variable 'table'. On remarque que la chaine est
// découpée, la coloration syntaxique nous aide beaucoup à mettre ce genre
// de fantaisie en relief. Ce découpage se fait à l'aide de l'opérateur '.' (point)
// qui est en fait l'opérateur de concaténation - une concaténation est
// l'assemblage d'une chaine de caractères avec une autre. Cette requête
// donne en quelque sorte un "ordre" au SGBD, ordre qui est "donne moi
// tous les champs email_adh distincs depuis la table - dont le nom est
// donnée par une variable - sachant qu'on ne veut que les entrée dont
// le statut est dans cette liste." La liste étant justement ce qu'on définit
// lors de la concaténation de la requête avec la fonction 'implode'.
// Implode est une fonction PHP qui permet de réunir plusieurs valeur
// d'une liste (notre tableau de tout à l'heure - faut suivre) en insérant
// une chaine de caractère entre chaque élément (ou pièce dans notre
// jargon) avant de renvoyer une chaine de caractère. On dis donc à MySQL
// d'utiliser ces éléments comme une liste avec laquelle il doit effectuer
// une vérification - qui dans notre cas porte sur la colonne id_status.
// Tout cela se fait avec la magie du mot clé 'IN' en SQL et qui signifie
// en quelque sort "est parmi".
$query = "SELECT DISTINCT(email_adh) FROM `$table` WHERE `id_status` IN (" . implode(',', $status) . ")"; |