Afficher une table
Afficher la table clients dans un tableau
La librairie PDO - PHP Data Objects
Syntaxe orienté objet
Est utilisé ici l'extension PDO avec sa syntaxe POO (Programmation Orientée Objet) qui permet de faire appel à des méthodes d'objet. L'exemple ci-dessus appel la méthode prepare() de l'objet PDO ($bdd) avec l'opérateur flèche -> (tiret du 6 et signe supérieur). Cet opérateur d'appel sert à accéder aux éléments d'une classe (méthode ou attribut).Requêtes préparées et procédures stockées
Une requête préparée n'est analysée (ou préparée) qu'une seule fois, mais peut être exécutée plusieurs fois avec des paramètres différents. Elles utilisent moins de ressources et s'exécutent plus rapidement. Si votre application utilise exclusivement les requêtes préparées, vous pouvez être sûr qu'aucune injection SQL n'est possible (Cependant, si vous construisez d'autres parties de la requête en vous basant sur des entrées utilisateurs, vous continuez à prendre un risque). Plus d'infos sur Php.netRequire_once et requêtes
Attention: Sur un serveur Apache local, un require_once() sur un fichier qui contiens une requête génère une notice "undefined variable" si cette requête utilise des variables. Il faut donc, en production, ne pas faire de require_once() sur un fichier qui contiendrait toutes vos requêtes.Afficher une table MySQL avec la librairie PDO
L'extension PDO (PHP Data Objects) est préinstallée dans PHP : on peut donc l'utiliser directement<?php
// connexion à la base
$user = "root";
$pass = "";
$dnspdo = 'mysql:dbname=mabase;host=localhost;charset=utf8';
$bdd = new PDO($dnspdo, $user, $pass);
// Par sécurité, tout le code ci-dessus sera remplacé par un require_once('dossier/infos.php');
// avec un htaccess interdisant l'accès au dossier
// Récupère les données de la table clients
$requete1 = 'SELECT * FROM clients';
// le prepare (avec le execute) est comme un query mais beaucoup plus sécurisé (voir ci-dessous)
// l'opérateur flèche -> permer d'accéder aux éléments d'une classe (méthode ou attribut)
$resultat = $bdd->prepare($requete1);
$resultat->execute();
// récupe d'infos (pas utilisés ici)
$nbreResult = $resultat->rowCount(); // Nbre de ligne de résultat
$colcount = $resultat->columnCount(); // Nombre de colonne
if (!$resultat) {
echo "Problème de requete";
} else {
?>
// Affichage des clients dans une liste à puce
Liste des clients :<br>
<ul>
<?php
while($ligne = $resultat->fetch()) {
echo "<li>".$ligne['nom_client']."</li>";
}
?>
</ul>
<?php
} // fin du else
$resultat->closeCursor(); // libère le résultat
// Un closeCursor annule l'execute() mais pas l'analyse (prepare) donc impose un nouveau execute() si une nouvelle requête est utilisée plus bas - Equivalent à MYSQL_DATA_SEEK (si 2 fetch à la suite)
?>
Afficher une table MySQL avec la librairie MySQLi
La librairie Mysqli (i pour improuve) est aujourd'hui moins sécurisée que l'extension PDO$base = "mabase";
$user = "root";
$pass = "";
$serveur = "127.0.0.1";
/* Note : pour un affichage rapide, privilégiez l'adresse IP
au nom localhost qui doit passer par un dns */
$mysqli = new mysqli($serveur, $user, $pass, $base); // on instancie la classe mysqli
if ($mysqli->connect_errno) { // appel de méthode avec l'opérateur ->
printf("Échec de la connexion : %s\n", $mysqli->connect_error); // voir printf
exit();
}
// Par sécurité, tout le code ci-dessus sera idéalement remplacé par un require_once('dossier/fichier.php');
$resultat = $mysqli->query("SELECT * FROM Clients"); // appel de méthode avec l'opérateur ->
//Si beaucoup de données, on utilise MYSQLI_USE_RESULT
//$resultat = $mysqli->query("SELECT * FROM Clients", MYSQLI_USE_RESULT)
if (!$resultat) {
printf("Problème de requête - Erreur : %s\n", $mysqli->error); }
else {
?>
<ul>
<?php
// Affichage table dans tableau associatif ou numérique ou les deux (BOTH)
while($ligne = $resultat->fetch_array(MYSQLI_BOTH)) {
$format = '<li>%1$s - %2$s</li>'; // simple côte obligatoire
printf($format, utf8_encode($ligne["prenom_client"]), $ligne["nom_client"]);
}
?>
</ul>
<?php
}
$resultat->close(); // libère les résultats
$mysqli->close(); // ferme la connexion
?>