Maison >base de données >tutoriel mysql >Pourquoi les instructions préparées dans MySQLi sont-elles essentielles pour les interactions sécurisées avec les bases de données ?
Dans votre extrait de code, vous rencontrez une erreur lors de l'exécution des instructions préparées en raison de l'absence de liaison de paramètres. Selon la documentation MySQLi, les marqueurs de paramètres dans les instructions préparées doivent être liés aux variables d'application à l'aide de mysqli_stmt_bind_param avant l'exécution.
Pour rectifier l'erreur, modifiez votre code comme suit :
$name = 'one'; $age = 1; $stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?,?)"); // Bind parameters to application variables (string & integer in this case) $stmt->bind_param('si', $name, $age); // Execute the prepared statement after binding $stmt->execute();
L'utilisation de MySQLi pour les déclarations préparées est recommandée en raison de ses fonctionnalités de sécurité améliorées. Les instructions préparées empêchent les vulnérabilités d'injection SQL en séparant la requête des valeurs, réduisant ainsi le risque d'injection de code malveillant dans votre base de données.
Voici un exemple complet d'instructions préparées , couvrant la connexion, l'insertion et la sélection avec gestion des erreurs :
<?php // Database connection $mysqli = new mysqli("localhost", "root", "root", "test"); if ($mysqli->connect_errno) { echo "Failed to connect to MySQL: " . $mysqli->connect_error; exit; } // Prepare statement for insertion $stmt = $mysqli->prepare("INSERT INTO users (name, age) VALUES (?, ?)"); if (!$stmt) { echo "Error preparing statement: " . $mysqli->error; exit; } // Bind parameters and execute insertion $name = 'one'; $age = 1; $stmt->bind_param('si', $name, $age); if (!$stmt->execute()) { echo "Error executing statement: " . $stmt->error; exit; } // Prepare statement for selection $stmt = $mysqli->prepare("SELECT name, age FROM users WHERE id = ?"); if (!$stmt) { echo "Error preparing statement: " . $mysqli->error; exit; } // Bind parameter and execute selection $id = 1; $stmt->bind_param('i', $id); if (!$stmt->execute()) { echo "Error executing statement: " . $stmt->error; exit; } // Retrieve and display results $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { echo "Name: " . $row['name'] . ", Age: " . $row['age'] . "<br>"; } // Close statement and connection $stmt->close(); $mysqli->close(); ?>
Cet exemple inclut la gestion des erreurs à chaque étape, garantissant la bonne exécution de requêtes et fourniture de messages d'erreur informatifs en cas de problème.
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!