PHP MySQL Lire des données
Lire des données depuis une base de données MySQL
L'instruction SELECT est utilisée pour lire des données depuis une table :
SELECT column_name(s) FROM table_name
Nous pouvons utiliser le signe * pour lire tous les champs de la table :
SELECT * FROM table_name
Pour en savoir plus sur SQL, veuillez consulter notreTutoriel SQL。
Utilisation de MySQLi
Dans l'exemple suivant, nous lisons les colonnes id, firstname et lastname de la table MyGuests dans la base de données myDB et les affichons sur la page :
Exemple (MySQLi - orienté objet)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Échec de la connexion :" . $conn->connect_error);
}
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Nom : " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 résultats";
}
$conn->close();
?>
L'analyse du code ci-dessus est la suivante :
Tout d'abord, nous définissons l'instruction SQL pour lire les trois champs id, firstname et lastname de la table MyGuests. Ensuite, nous utilisons cette instruction SQL pour récupérer le jeu de résultats depuis la base de données et l'affecter à la variable $result.
La fonction num_rows() vérifie les données renvoyées.
Si plusieurs lignes sont renvoyées, la fonction fetch_assoc() place le jeu de résultats dans un tableau associatif et l'affiche dans une boucle. La boucle while() parcourt le jeu de résultats et affiche les valeurs des trois champs id, firstname et lastname.
L'exemple suivant utilise l'approche procédurale MySQLi, avec des effets similaires au code ci-dessus :
Exemple (MySQLi - procédural)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
die("Échec de la connexion :" . mysqli_connect_error());
}
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_assoc($result)) {
echo "id: " . $row["id"]. " - Nom : " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 résultat";
}
mysqli_close($conn);
?>
Utilisation de PDO (+ requêtes préparées)
L'exemple suivant utilise des requêtes préparées.
Il sélectionne les champs id, firstname et lastname de la table MyGuests et les place dans un tableau HTML :
Exemple (PDO)
<?php
echo "<table style='border: solid 1px black;'>";
echo "<tr><th>Id</th><th>Prénom</th><th>Nom</th></tr>";
class TableRows extends RecursiveIteratorIterator {
function __construct($it) {
parent::__construct($it, self::LEAVES_ONLY);
}
function current() {
return "<td style='width:150px;border:1px solid black;'>" . parent::current(). "</td>";
}
function beginChildren() {
echo "<tr>";
}
function endChildren() {
echo "</tr>" . "\n";
}
}
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT id, firstname, lastname FROM MyGuests");
$stmt->execute();
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
echo $v;
}
}
catch(PDOException $e) {
echo "Erreur : " . $e->getMessage();
}
$conn = null;
echo "</table>";
?>
Autres extensions