PDO et nouvelles requêtes dans la page web

Prérequis

Vous avez un serveur local qui fonctionne, avec PhPMyAdmin

Vous avez au moins une base de données créée dans PhP MyAdmin (voir cours Créer une base de données avec PhPMyAdmin )

Votre connexion avec une page PhP (PDO) fonctionne.


Seulement les lignes où un attribut a une valeur donnée:

SELECT * FROM MATABLE Colonne1="maValeur"


SELECT Colonne2, Colonne3 FROM MATABLE Colonne1="maValeur"


Exemple dans PhPMyAdmin avec la table Filière:

SELECT * FROM Evaluation WHERE idCours="2"

SELECT Modalites, Sujet FROM Evaluation WHERE idCours="2"


D'autres fonctionnalités en SQL

Modifier des valeurs selon certaines conditions

En SQL, vous pouvez mettre à jour des valeurs de la table selon certaines conditions spécifiées avec un WHERE par exemple. Il s'agit de UPDATE. On pourra modifier un mot de passe d'un compte utilisateur en fonction de la clef primaire par exemple.


"Créer" des colonnes en SQL

Si vous vous souvenez bien, dans une base de données, en théorie, on ne stocke que ce que l'on ne peut pas récupérer autrement. Par exemple, on ne stockera pas le nombre d'adhérants s'il suffit de compter le nombre d'occurences dans une table Adhérent.

En SQL, vous pouvez créer vos propres "colonnes" qui permettent de récuperer ce type d'informations, en utilisant par exemple des instructions SQL comme COUNT pour compter les occurences, faire des calculs, connaitre le minimum ou le maximum de certaines valeurs, faire des sommes, etc.


Quelques instructions utiles pour les dates

Nous verrons quelques instructions utiles pour manipuler les dates.



Update

Les requêtes UPDATE permettent de mettre à jour une valeur ancienneValeur par nouvelleValeur dans la colonne attribut de la table maTable pour toutes les occurrences de la table avec l'instruction suivante. On utilise le mot clef UPDATE, suivi du nom de la table, puis du mot clef SET, du nom de l'attribut où la valeur doit être modifié puis de "=" et de la nouvelle valeur qu'il doit prendre:

UPDATE maTable SET attribut=nouvelleValeur


Imaginons, par exemple, que l'on souhaite remplacer tous les prénoms (attribut prenom) d'une table Personne par "M. ou Mme ou Autre". On écrira:

UPDATE Personne SET prenom="M. ou Mme ou Autre";


Il est possible de ne faire des modifications que sous certaines conditions, en ajoutant un WHERE

UPDATE maTable SET attribut=nouvelleValeur WHERE condition


Imaginons, par exemple, que l'on souhaite remplacer tous les prénoms (attribut prenom) d'une table Personne par "Mme" si c'est une personne enregistrée avec un genre F dans la base de données. On écrira:

UPDATE Personne SET prenom="Mme" WHERE genre="F";

Exercice 14

Question 1. Dans la table Cours, modifier le nom du cours avec l'id 1 pour que le nom soit "Algo"

UPDATE Cours SET NomCours="Algo" WHERE idCours="1"

Question 2. Faites la même chose dans votre page web en utilisant une requête préparée avec un marqueur pour l'Id et afficher les resultats avec fetch()


Si on a choisi de faire une requête préparée:


$requete=$bdd -> prepare("UPDATE Cours SET NomCours='Algo' WHERE idCours=:monId")

");

$lIDCHoisi="1";


$requete->bindValue('monId',$lIDCHoisi,PDO::PARAM_STR );

$requete->execute();




Il reste maintenant à afficher les éléments des resultats avec fetch, en affichant chacune des valeurs des colonnes:


while ( $ligne = $requete->fetch() ) {

echo "<p>Nom :". $ligne['NomCours']." </p>";


}

Count

COUNT permet de compter le nombre d'occurences récupérées, par exemple via un SELECT. On utilise le mot clef COUNT autour d'un * pour obtenir le nombre d'occurences dans une table

SELECT COUNT(*) FROM maTable


Imaginons, par exemple, que l'on souhaite connaitre le nombre de personnes enregistrées dans une table Personne. On écrira:

SELECT COUNT(*) FROM Personne



Il est possible de ne compter que les occurrences respectant certaines conditions, en ajoutant un WHERE

SELECT COUNT(*) FROM maTable WHERE condition


Imaginons, par exemple, que l'on souhaite compter le nombre de personnes enregistrées dans une table Personne qui ont un genre F dans la base de données. On écrira:

SELECT COUNT(*) FROM Personne WHERE genre="F";

Exercice 15

Question 1. Dans la base de données Filière, compter le nombre d'UEs

SELECT COUNT(*) FROM UE

Question 2. Si vous faites cette requête dans PhPMyAdmin, quel est le nom de la colonne qui indique le résultat?

COUNT(*)

Question 3. Dans la base de données Filière, compter le nombre d'UEs ayant un "a" dans le nom

SELECT COUNT(*) FROM UE WHERE Nom LIKE "%a%"

Question 4. Faites la même chose dans votre page web en utilisant une requête préparée et afficher le resultat avec fetch()


Si on a choisi de faire une requête préparée:


$requete=$bdd -> prepare("SELECT COUNT(*) FROM UE WHERE Nom LIKE :like ")

");

$monLike="%a%";


$requete->bindValue('like',$monLike,PDO::PARAM_STR );

$requete->execute();




Il reste maintenant à afficher les éléments des resultats avec fetch, en affichant chacune des valeurs des colonnes:


while ( $ligne = $requete->fetch() ) {

echo "<p>Nombre :". $ligne['Count(*)']." </p>";


}

CURRENT DATE

Pour connaitre la date du jour (Jour, mois, année), vous pouvez utiliser CURRENT_DATE. Pour connaitre la date actuelle, il suffit de faire:

SELECT CURRENT_DATE


Pour connaitre l'heure en cours, vous pouvez utiliser CURRENT_TIME. Pour connaitre l'heure actuelle, il suffit de faire:

SELECT CURRENT_TIME


Pour connaitrela date et l'heure en cours, vous pouvez utiliser CURRENT_TIMESTAMP. Pour connaitre l'heure actuelle, il suffit de faire:

SELECT CURRENT_TIMESTAMP


Exercice 16

Question 1. Dans votre site, faites une requête SQL pour connaitre la date et l'heure et afficher le resultat avec fetch()


Si on a choisi de faire une requête préparée:


$requete=$bdd -> prepare("SELECT CURRENT_TIMESTAMP ");


$requete->execute();




Il reste maintenant à afficher les éléments des resultats avec fetch, en affichant chacune des valeurs des colonnes:


while ( $ligne = $requete->fetch() ) {

echo "<p>Nombre :". $ligne['CURRENT_TIMESTAMP']." </p>";


}

Question 2. Dans la base de données Filière, afficher le nombre d'évaluations qui ont une date de rendu à venir

SELECT * FROM Evaluation WHERE fin> CURRENT_TIMESTAMP

Question 3. En utilisant une jointure, afficher la modalité d'une évaluation et le nom du cours de l'évaluation pour les évaluations qui ont une date de rendu à venir

SELECT Evaluation.Modalites, Cours.NomCours FROM Evaluation INNER JOIN COURS ON Evaluation.idCours=Cours.idCours WHERE fin> CURRENT_TIMESTAMP

Jour, mois, année

Pour connaitre l'année d'une date, on encadre la date par YEAR ( ). Par exemple pour connaitre l'année d'aujourd'hui, vous pouvez l'utiliser avec CURRENT_DATE.

SELECT YEAR(CURRENT_DATE)


Pour connaitre le mois d'une date, on encadre la date par MONTH( ) pour le numéro, et MONTHNAME( ) pour le nom du mois. Par exemple pour connaitre le mois d'aujourd'hui, vous pouvez les utiliser avec CURRENT_DATE.

SELECT MONTH(CURRENT_DATE)

SELECT MONTHNAME(CURRENT_DATE)


Pour connaitre le jour d'une date, on encadre la date par DAY( ) pour le numéro, et DAYNAME( ) pour le nom du jour de la semaine. Par exemple pour connaitre le jour d'aujourd'hui, vous pouvez les utiliser avec CURRENT_DATE.

SELECT DAY(CURRENT_DATE)

SELECT DAYNAME(CURRENT_DATE)

Exercice 17

Question 1. Dans la base de données Filière, afficher le jour de rendu des évaluations

SELECT DAYNAME(Fin), Modalites, Debut, Fin FROM Evaluation

Question 2. Dans la base de données Filière, afficher le nombre d'évaluations qui ont une date de rendu un mardi

SELECT * FROM Evaluation WHERE DAYNAME(fin)= "Tuesday"

Faire des sommes

On peut faire des sommes des valeurs des colonnes avec SUM. Par exemple, si on veut calculer la somme des notes d'une table resultat, on pourrait écrire:

SELECT SUM(notes) FROM Resultat


On peut calculer la moyenne en divisant par le nombre d'occurrences:

SELECT (SUM(notes)/COUNT(*) FROM Resultat

Faire des moyennes

On peut faire des moyennes des valeurs des colonnes avec AVG. Par exemple, si on veut calculer la moyenne des notes d'une table Resultat, on pourrait écrire:

SELECT AVG(notes) FROM Resultat


Connaitre le maximum sur une colonne

On peut le maximum des valeurs des colonnes avec MAX. Par exemple, si on veut connaitre la note maximale d'une table Resultat, on pourrait écrire:

SELECT MAX(notes) FROM Resultat


Connaitre le minimum sur une colonne

On peut le minimum des valeurs des colonnes avec MIN. Par exemple, si on veut connaitre la note minimal d'une table Resultat, on pourrait écrire:

SELECT MIN(notes) FROM Resultat


Exercice 18

Question 1. Comment obtiendrez-vous la moyenne des notes d'un étudiant avec un idEtudiant égal à 5?

SELECT AVG(notes) FROM Resultat WHERE idEtudiant='5'