Sécuriser les instructions préparées en PHP pour MySQL
Lorsque vous travaillez avec MySQL et PHP, l'utilisation d'instructions préparées est cruciale pour garantir la sécurité de votre base de données requêtes. Les instructions préparées se défendent contre les attaques par injection SQL en séparant l'instruction SQL des entrées fournies par l'utilisateur.
Création d'une instruction préparée sécurisée
Pour créer une instruction préparée sécurisée, nous' J'utiliserai l'extrait de code suivant :
$db = new mysqli("host", "user", "pw", "database"); $stmt = $db->prepare("SELECT * FROM mytable where userid=? AND category=? ORDER BY id DESC"); $stmt->bind_param('ii', intval($_GET['userid']), intval($_GET['category']));
Expliquer le Code
Récupération de données
Après avoir préparé l'instruction, vous pouvez l'exécuter, récupérer des données et parcourir les résultats :
$stmt->execute(); $stmt->store_result(); $stmt->bind_result($column1, $column2, $column3); while ($stmt->fetch()) { echo "col1=$column1, col2=$column2, col3=$column3 \n"; }
Tableaux associatifs pour plus de commodité
Pour récupérer des données sous forme de tableau associatif (par exemple, pour les requêtes SELECT *), vous pouvez utiliser la fonction suivante :
function stmt_bind_assoc(&$stmt, &$out) { $data = mysqli_stmt_result_metadata($stmt); $fields = array(); $out = array(); $fields[0] = $stmt; $count = 1; while ($field = mysqli_fetch_field($data)) { $fields[$count] = &$out[$field->name]; $count++; } call_user_func_array(mysqli_stmt_bind_result, $fields); }
Cette fonction vous permet de lier les résultats à un tableau associatif, ce qui facilite leur utilisation dans votre code :
$stmt->store_result(); $resultrow = array(); stmt_bind_assoc($stmt, $resultrow); while ($stmt->fetch()) { print_r($resultrow); }
Considérations sur les performances
Bien que les instructions préparées soient conçues pour améliorer les performances, leur utilisation est quelques-unes les fois passées sur une page peuvent ne pas générer de gains significatifs. Cependant, si votre application effectue fréquemment des opérations de base de données, la préparation des instructions peut entraîner des améliorations notables des temps de réponse.
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!