Les instructions préparées dans PHP 7, en utilisant les extensions MySQLI ou PDO, offrent un moyen structuré d'exécuter des requêtes SQL avec des valeurs paramétrées. Cette approche améliore considérablement la sécurité et les performances par rapport aux variables d'intégration directement en chaînes SQL.
En utilisant MySQLI:
Tout d'abord, vous avez besoin d'une connexion de base de données. Supposons que vous ayez déjà établi une connexion en utilisant mysqli_connect()
.
<?php $conn = mysqli_connect("localhost", "your_username", "your_password", "your_database"); if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } // Prepare the statement $stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?"); // Bind parameters. 's' indicates string type. Adjust as needed for other data types (i, d, b). $stmt->bind_param("ss", $username, $password); // Assign values to parameters $username = $_POST['username']; $password = $_POST['password']; //Important: NEVER directly use user input without sanitization. Consider password hashing instead of storing plain text passwords! // Execute the statement $stmt->execute(); // Bind result variables $stmt->bind_result($id, $username, $email, $password); //Replace with your actual column names // Fetch results while ($stmt->fetch()) { echo "ID: " . $id . "<br>"; echo "Username: " . $username . "<br>"; echo "Email: " . $email . "<br>"; // Avoid echoing the password! } // Close the statement and connection $stmt->close(); $conn->close(); ?>
Utilisation de PDO:
PDO offre une approche plus orientée objet.
<?php $dsn = 'mysql:host=localhost;dbname=your_database'; $user = 'your_username'; $password = 'your_password'; try { $pdo = new PDO($dsn, $user, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username AND password = :password"); $stmt->execute([ ':username' => $_POST['username'], ':password' => $_POST['password'], //Again, NEVER use raw user input directly for passwords. Hash them! ]); $results = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($results as $row) { echo "ID: " . $row['id'] . "<br>"; echo "Username: " . $row['username'] . "<br>"; echo "Email: " . $row['email'] . "<br>"; // Avoid echoing the password! } } catch (PDOException $e) { echo "Error: " . $e->getMessage(); } ?>
N'oubliez pas de remplacer les valeurs de l'espace réservé par vos rédactions de données et vos noms de table / colonnes. Surtout, toujours désinfecter ou, mieux encore, les entrées des utilisateurs de hachage avant de les utiliser dans les requêtes.
Les instructions préparées atténuent considérablement les vulnérabilités d'injection SQL. L'injection SQL se produit lorsque les utilisateurs malveillants injectent du code SQL dans les champs d'entrée, modifiant ou compromettant potentiellement votre base de données. Les instructions préparées empêchent cela en séparant le code SQL des données. La base de données traite les paramètres comme des données, et non comme un code exécutable, neutralisant ainsi toutes les tentatives malveillantes pour manipuler la requête. En effet, la base de données analyse la requête une fois pendant la préparation, puis exécute uniquement la requête avec les paramètres fournis.
Les instructions préparées peuvent augmenter les performances de plusieurs façons:
>?Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!