PHP Utilisation de MySQL avec la clause WHERE
Sélectionner et filtrer des données d'une base de données MySQL
La clause WHERE est utilisée pour filtrer les enregistrements.
Elle permet d'extraire uniquement les enregistrements qui remplissent une condition spécifiée.
SELECT column_name(s) FROM table_name WHERE column_name operator value Pour en savoir plus sur SQL, veuillez visiter notre tutoriel SQL .
Sélectionner et filtrer des données avec MySQLi
L'exemple suivant sélectionne les colonnes id, firstname et lastname de la table MyGuests où le lastname est "Doe", et les affiche sur la page :
Exemple (MySQLi orienté objet)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Créer une connexion
$conn = new mysqli($servername, $username, $password, $dbname);
// Vérifier la connexion
if ($conn->connect_error) {
die("Échec de la connexion: " . $conn->connect_error);
}
$sql = "SELECT id, firstname, lastname FROM MyGuests WHERE lastname='Doe'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// afficher les données de chaque ligne
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Nom: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 résultats";
}
$conn->close();
?> Lignes de code à expliquer à partir de l'exemple ci-dessus :
Tout d'abord, nous configurons la requête SQL qui sélectionne les colonnes id, firstname et lastname de la table MyGuests où le lastname est "Doe". La ligne suivante exécute la requête et stocke les données résultantes dans une variable appelée $result.
Ensuite, la fonction num_rows() vérifie s'il y a plus de zéro lignes retournées.
S'il y a plus de zéro lignes, la fonction fetch_assoc() place tous les résultats dans un tableau associatif que nous pouvons parcourir. La boucle while() parcourt l'ensemble des résultats et affiche les données des colonnes id, firstname et lastname.
L'exemple suivant montre la même chose que l'exemple ci-dessus, de manière procédurale avec MySQLi :
Exemple (MySQLi procédural)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Créer une connexion
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Vérifier la connexion
if (!$conn) {
die("Échec de la connexion: " . mysqli_connect_error());
}
$sql = "SELECT id, firstname, lastname FROM MyGuests WHERE lastname='Doe'";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
// afficher les données de chaque ligne
while($row = mysqli_fetch_assoc($result)) {
echo "id: " . $row["id"]. " - Nom: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 résultats";
}
mysqli_close($conn);
?> Vous pouvez également afficher le résultat dans un tableau HTML :
Exemple (MySQLi orienté objet)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Créer une connexion
$conn = new mysqli($servername, $username, $password, $dbname);
// Vérifier la connexion
if ($conn->connect_error) {
die("Échec de la connexion: " . $conn->connect_error);
}
$sql = "SELECT id, firstname, lastname FROM MyGuests WHERE lastname='Doe'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
echo "<table><tr><th>ID</th><th>Nom</th></tr>";
// afficher les données de chaque ligne
while($row = $result->fetch_assoc()) {
echo "<tr><td>".$row["id"]."</td><td>".$row["firstname"]." ".$row["lastname"]."</td></tr>";
}
echo "</table>";
} else {
echo "0 résultats";
}
$conn->close();
?> Sélectionner des données avec PDO (+ instructions préparées)
L'exemple suivant utilise des instructions préparées.
Il sélectionne les colonnes id, firstname et lastname de la table MyGuests où le lastname est "Doe", et les affiche 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 de famille</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 WHERE lastname='Doe'");
$stmt->execute();
// définir le tableau résultant comme associatif
$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>";
?>