Maison >développement back-end >tutoriel php >Comment puis-je récupérer en toute sécurité des données de MySQL à l'aide d'instructions préparées par PHP ?
Création d'instructions préparées MySQL sécurisées en PHP
Si vous êtes débutant en PHP avec des instructions préparées MySQL, vous êtes tombé sur le besoin de récupérer en toute sécurité les données des colonnes. Pour y parvenir, plongeons dans le monde des instructions préparées, garantissant la sécurité de vos requêtes.
Dévoilement de la requête vulnérable
Votre instruction SQL actuelle, bien que simple, échoue en termes de sécurité :
$qry = "SELECT * FROM mytable where userid='{$_GET['userid']}' AND category='{$_GET['category']}'ORDER BY id DESC";
Cette approche laisse votre application vulnérable aux attaques par injection SQL, où des utilisateurs malveillants peuvent manipuler votre requête en utilisant des caractères spéciaux.
Création d'une déclaration préparée sécurisée
Pour immuniser votre requête, utilisons une déclaration préparée :
$stmt = $db->prepare("SELECT * FROM mytable WHERE userid=? AND category=? ORDER BY id DESC");
Cette déclaration utilise des espaces réservés ("?") pour représenter les paramètres d'entrée. Nous lions ensuite ces paramètres aux valeurs réelles en toute sécurité :
$stmt->bind_param('ii', intval($_GET['userid']), intval($_GET['category']));
En liant les données séparément, nous empêchons les caractères malveillants de modifier notre requête.
Optimisation des performances
Vous êtes curieux de connaître les implications en termes de performances des instructions préparées. Bien qu'elles puissent offrir des avantages marginaux pour une seule exécution, elles brillent vraiment lorsqu'elles sont exécutées plusieurs fois au sein d'une page ou d'une boucle.
L'instruction préparée met en cache le plan de requête, éliminant ainsi le besoin de l'analyser et de le compiler à chaque exécution. . Cette optimisation peut conduire à des améliorations significatives de la vitesse, en particulier pour les requêtes complexes.
Extraction de tableaux associatifs
Pour les requêtes qui renvoient plusieurs colonnes, vous pouvez utiliser la fonction suivante pour automatiquement se lier à un tableau associatif :
function stmt_bind_assoc (&$stmt, &$out) { ... }
Cet utilitaire rationalise le processus de travail avec les tableaux renvoyés par SELECT * requêtes.
Conclusion
Les instructions préparées sont essentielles pour sécuriser vos requêtes MySQL et prévenir les attaques par injection SQL. En les implémentant, vous pouvez protéger votre application et bénéficier d'optimisations de performances lors de l'exécution multiple de la même requête. Profitez de la puissance des instructions préparées pour un accès sécurisé et efficace aux données.
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!