La variable globale de PHP get
Cet article vous explique comment utiliser les fonctions prepare() et mysqli_prepare() en PHP, et vous apprenez ainsi à sécuriser vos requêtes SQL et à améliorer les performances de vos applications
Pour en savoir plus sur les requête préparées voir notre tutoriel sur : Instructions ou requêtes préparées
Les fonctions prepare() et mysqli_prepare() sont utilisées pour préparer une requête SQL pour l'exécution. Elles permettent de sécuriser les requêtes contre les injections SQL, d'améliorer les performances et de faciliter la réutilisation des requêtes.
La syntaxe de prepare() est la suivante :
$stmt = prepare($query);
Où query est la chaîne de requête SQL à préparer.
La syntaxe de mysqli_prepare() est la suivante :
$stmt = mysqli_prepare($link, $query);
Où link est la connexion à la base de données et query est la chaîne de requête SQL à préparer.
Les fonctions prepare() et mysqli_prepare() peuvent être utilisées de deux manières différentes :
La valeur de retour des fonctions prepare() et mysqli_prepare() est un objet de requête ou false en cas d'erreur.
Les fonctions prepare() et mysqli_prepare() acceptent un paramètre optionnel, options, qui peut être utilisé pour spécifier les options de préparation de la requête.
Voici un exemple d'utilisation de prepare() dans une approche orientée objet :
Exemple : Copier le code
\n<?php\n // Connexion à la base de données $link = mysqli_connect("localhost", "root", "", "my_database"); // Préparation de la requête $stmt = $link->prepare("SELECT * FROM users WHERE username = ?"); // Lier les paramètres $stmt->bind_param("s", $username); // Exécution de la requête $stmt->execute(); // Récupération des résultats $result = $stmt->get_result(); // Parcours des résultats while ($row = $result->fetch_assoc()) { echo $row["username"] . "\n"; } ?>
Voici un exemple d'utilisation de mysqli_prepare() dans une approche procédurale :
Exemple : Copier le code
\n<?php\n // Connexion à la base de données $link = mysqli_connect("localhost", "root", "", "my_database"); // Préparation de la requête $stmt = mysqli_prepare($link, "SELECT * FROM users WHERE username = ?"); // Lier les paramètres mysqli_stmt_bind_param($stmt, "s", $username); // Exécution de la requête mysqli_stmt_execute($stmt); // Récupération des résultats $result = mysqli_stmt_get_result($stmt); // Parcours des résultats while ($row = mysqli_fetch_assoc($result)) { echo $row["username"] . "\n"; } ?>
Voici quelques cas d'utilisation supplémentaires pour les fonctions prepare() et mysqli_prepare(), avec des exemples dans les deux approches (orientée objet et procédurale) pour chaque cas, en utilisant la base teste avec une table perso dont les champs (id, nom, prenom, email et age) et en utilisant la connexion suivante :
Exemple : Copier le code
<?php $seveur='localhost'; $utilisateur='root'; $motDePasse=''; $ma_base_de_données='teste'; // Connexion à la base de données $link = mysqli_connect($seveur, $utilisateur, $motDePasse, $ma_base_de_données); ?>
Remplacer les valeurs des variables : $seveur, $utilisateur, $motDePasse et $ma_base_de_données , par vos valeurs
Remplacer aussi dans ce qui va suivre le nom de la table par votre table et les champs de votre table
Dans ce cas d'utilisation, nous allons utiliser prepare() ou mysqli_prepare() pour mettre à jour des données dans la table perso dans la base de données teste.
Exemple : Copier le code
<?php $seveur='localhost'; $utilisateur='root'; $motDePasse=''; $ma_base_de_données='teste'; // Connexion à la base de données $link = mysqli_connect($seveur, $utilisateur, $motDePasse, $ma_base_de_données); // Préparation de la requête $stmt = $link->prepare("UPDATE perso SET nom = ?, prenom = ?, email = ?, age = ? WHERE id = ?"); // Lier les paramètres $id = 1; $nom = "John Doe Updated"; $prenom = "John"; $email = "john.doe@example.com"; $age = 31; mysqli_stmt_bind_param($stmt, "ssssi", $nom, $prenom, $email, $age, $id); // Exécution de la requête mysqli_stmt_execute($stmt); ?>
Exemple : Copier le code
<?php $seveur='localhost'; $utilisateur='root'; $motDePasse=''; $ma_base_de_données='teste'; // Connexion à la base de données $link = mysqli_connect($seveur, $utilisateur, $motDePasse, $ma_base_de_données); // Préparation de la requête $stmt = mysqli_prepare($link, "UPDATE perso SET nom = ?, prenom = ?, email = ?, age = ? WHERE id = ?"); // Lier les paramètres $id = 1; $nom = "John Doe Updated"; $prenom = "John"; $email = "john.doe@example.com"; $age = 31; mysqli_stmt_bind_param($stmt, "ssssi", $nom, $prenom, $email, $age, $id); // Exécution de la requête mysqli_stmt_execute($stmt); ?>
Dans cet exemple, nous avons utilisé la fonction mysqli_stmt_bind_param() pour lier les variables id, nom, prenom, email et age aux marqueurs de paramètre ? dans la requête SQL. Cela permet d'éviter les injections SQL et d'améliorer la sécurité.
Dans cet exemple nous allons Supprimer l'eregistrement dont l'id est 10
Exemple : Copier le code
<?php $seveur='localhost'; $utilisateur='root'; $motDePasse=''; $ma_base_de_données='teste'; // Connexion à la base de données $link = mysqli_connect($seveur, $utilisateur, $motDePasse, $ma_base_de_données); // Préparation de la requête $stmt = $link->prepare("DELETE FROM perso WHERE id = ?"); // Lier les paramètres $id = 1; mysqli_stmt_bind_param($stmt, "i", $id); // Exécution de la requête mysqli_stmt_execute($stmt); ?>
Exemple : Copier le code
<?php $seveur='localhost'; $utilisateur='root'; $motDePasse=''; $ma_base_de_données='teste'; // Connexion à la base de données $link = mysqli_connect($seveur, $utilisateur, $motDePasse, $ma_base_de_données); // Préparation de la requête $stmt = mysqli_prepare($link, "DELETE FROM perso WHERE id = ?"); // Lier les paramètres $id = 10; mysqli_stmt_bind_param($stmt, "i", $id); // Exécution de la requête mysqli_stmt_execute($stmt); // Fermeture de la requête mysqli_stmt_close($stmt); ?>
Dans cet exemple, nous avons utilisé la fonction mysqli_stmt_execute() pour exécuter la requête SQL. Une fois la requête exécutée, nous avons utilisé la fonction mysqli_stmt_close() pour fermer la requête.