SQL de Base

La base de donnée "exemple" possède les champs suivants :

ChampTypeContenu
uidSERIALEntier qui s'incrémente à chaque nouvelle entrée
sert à retrouver une entrée directement
nomVARCHAR(20)Chaîne de caractères de max 20 caractères
contient le nom
ageINTEGEREntier 32 bits, contient l'âge

Les interfaces dans les encadrés permettent de tester des commandes sur cette table.

Create : INSERT

Pour ajouter un enregistrement dans une table, on utilisera

INSERT INTO tbl(fld1,fld2,...) VALUES(val1,val2,...)

Seuls les champs signalés recevront une valeur. Les autres champs recevront la valeur spéciale NULL sauf si ils ont une valeur par défaut.

Ne pas préciser le champ SERIAL s'il y en a un pour qu'il reçoive la valeur suivante dans la séquence.

INSERT INTO matable() VALUES('')

Read : SELECT

Pour récupérer des enregistrements d'une table, utiliser

SELECT fld1,fld2,... FROM tbl

Cette commande retournera tous les record de la table, dans l'ordre précisé dans la requête.

Pour ne conserver que les éléments vérifiant certaines conditions, préciser ces conditions en ajoutant une clause WHERE en fin de requête

WHERE cond1 AND cond2 AND ...

Les conditions seront de la forme champ=valeur, champ<valeur, ...

Si on veut que les résultats soient triés, ajouter en fin de requête (après le WHERE s'il existe) un

ORDER BY fld1,fld2,...

On peut préciser le mot DESC après un champ pour trier en ordre décroissant.

On peut utiliser ORDER BY RANDOM() pour mélanger les records

On peut limiter le nombre de résultats en ajoutant en fin de requête (après WHERE et ORDER)

LIMIT nbre

SELECT nom
Champs : id nom age WHERE ...

Update : UPDATE

Pour modifier des valeurs, on utilisera l'instruction UPDATE

UPDATE tbl SET fld1=val1,fld2,val2,...

Pour éviter de changer tous les enregistrements, on mettra une condition WHERE selon la même syntaxe que pour la lecture.

UPDATE matable SET nom = ' '
Champs : WHERE ...

Delete : DELETE

Pour effacer des enregistrements, on utilisera l'instruction

DELETE FROM tbl

De nouveau, on utilisera un WHERE afin de ne pas effacer toute la table mais seulement quelques enregistrements.

DELETE FROM matable
WHERE ...

PHP

Pour accéder à la base de données, on utilisera une chaîne de connexion de la forme

pgsql:host=localhost;port=5433;dbname=web20xx;user=web20xx;password=xyz123

Le code PHP sera le suivant :

<?php
$dbh=new PDO (
"pgsql:host=...");
...
$stm=$dbh->prepare(
requeteSQL);
$stm->execute();
while($res=$stm->fetch()) {
...
...$res["fld1"]...
...
}
?>

Si il ne peut y avoir qu'une seule ligne correspondant aux conditions de la requête, on peut remplacer le while par un if. Si il y a TOUJOURS un et un seul résultat, on peut même juste garder le $res=... sans utilise ni while ni if

Pour les requêtes qui ne retournent pas de résultat, on s'arrêtera après le execute()

Pour passer des valeurs dans la requête, on mettra des ? aux endroits où elles doivent apparaître dans la requête et on placera les valeurs dans le même ordre dans un tableau passé en paramètre au execute(). Ces valeurs correspondent aux endroits où on peut entrer un texte libre dans les exemples interactifs ci-dessus.

$stm=$dbh->prepare("DELETE FROM abc WHERE i<?");
$stm->execute(array(10));

A noter que le tableau de paramètres peut contenir des entiers, des réels, des chaînes ou la valeur null (en minuscules)