Pour
selectionner des enregistrements, nous utiliserons la méthode
query($requete).
?
1
2
3
4
5
|
require_once('conf/connection.php');
$select = $connection->query("SELECT * FROM createurs");
|
La variable
$select contiend maintenant le résultat de la requète, mais sous une forme un peu particulière : un
PDOStatement. Vous pourrez allé consulter la documentation pour obtenir des informations complémentaires sur cette classe.
http://www.php.net/manual/fr/class.pdostatement.php : Documentation officiel pour PDOStatement
Cet objet contiend la réponse du serveur de données à la requète que
nous lui avons envoyé. Cette objet va nous permettre de gérer
l'affichage des données reçues, pour cela il existe plusieurs méthodes :
Avec setFetchMode / fetch
PDO nous offre la libertée d'utiliser la réponse au format que nous
voulons, nous pouvons dire que nous voulons traiter les enregistrements
reçus comme des tableaux, comme des objets typés, etc... Comme nous
débutons, nous allons traiter les enregistrements comme des objets
simples.
Donc juste après avoir envoyé la requète (ou avant peu importe), nous
allons "configurer" notre objet PDOStatement pour qu'ils nous livre les
enregistrements comme des objets :
?
1
2
|
$select->setFetchMode(PDO::FETCH_OBJ);
|
Notre variables
$select contiend maintenant un objet pour
chaque enregistrement obtenu, pour traiter tous les résultats nous
allons utilise la boucle TANT QUE (la boucle while) :
?
1
2
3
4
5
6
|
while( $enregistrement = $select->fetch() )
{
echo '<h1>', $enregistrement->nom, ' ', $enregistrement->prenom, '</h1>';
}
|
Normalement, vous verrez une liste de nom de personnes connues appraitre dans un titre H1...
Si la réponse ne contiens pas de résutats,
$select->fetch() va retourner
NULL/
FALSE. (Et donc l'éxécution de la boucle sera interrompue).
Si vous faites une requète qui ne doit retourner qu'un seul
enregistrement, vous n'avez pas besoin d'utiliser une boucle pour
traiter les résultats, mais utilisez quand même une condition pour
éviter un message d'erreur disgracieux au moment de l'affichage :
?
1
2
3
4
5
6
7
8
9
10
11
12
|
$enregistrement = $select->fetch();
if( $enregistrement ) {
echo '<h1>', $enregistrement->nom, ' ', $enregistrement->prenom, '</h1>';
}
else {
echo "Aucun résultat";
}
|
Méthode fetch(PDO::FETCH_OBJ)
Petite variante avec une ligne de moins, dans cette exemple, le format de récupération (Format Objet) est précisé au moment du
fetch() :
?
1
2
3
4
5
6
7
8
|
while( $enregistrement = $select->fetch(PDO::FETCH_OBJ) )
{
echo '<h1>', $enregistrement->nom, ' ', $enregistrement->prenom, '</h1>';
}
|
Méthode fetchAll
Cette méthode va convertir notre objet de résultats en un tableau
d'objet, ensuite nous traitons le tableau comme un tableau classique, ce
cas d'application est surtout utilisé pour traiter des listes de
résultats (Lorsque l'on s'attend à plusieurs résultats) :
?
1
2
3
4
5
6
7
8
9
|
$createurs = $select->fetchAll(PDO::FETCH_OBJ);
while( $enregistrement = next($createurs) )
{
echo '<h1>', $enregistrement->nom, ' ', $enregistrement->prenom, '</h1>';
}
|
Je n'ai pas fait de test de performance sur ces différentes méthodes,
pour ma part j'aime bien la dernière car cela me permet potentiellement
de manipuler le tableau... Sinon j'utilise la précédente quand je
n'attend qu'un seul résultat.
C'est quoi ces caractères bizarres ???
Si vous avez mis des caractères spéciaux dans l'une des données affichées, c'est le drame.
Rien ne sert de vérifier le format de document ça ne viens pas de lui :P (Mais faites le quand même ça ne coute rien).
En effet, lors d'un echange avec le serveur web, l'
encodage de transmission n'est pas formement l'UTF8 !!!
Pour corriger/forcer ça nous avons 2 solutions :
-
Une solution standard mais pas très lisible
-
Une solution moins standard mais plus facile à lire.