Maison > base de données > tutoriel mysql > Comment puis-je utiliser en toute sécurité des instructions préparées en PHP pour interroger une base de données MySQL ?

Comment puis-je utiliser en toute sécurité des instructions préparées en PHP pour interroger une base de données MySQL ?

Barbara Streisand
Libérer: 2024-12-16 10:46:12
original
799 Les gens l'ont consulté

How Can I Securely Use Prepared Statements in PHP to Query a MySQL Database?

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']));
Copier après la connexion

Expliquer le Code

  1. Créer une connexion : Créez un objet de connexion MySQL ($db) à l'aide de la classe mysqli.
  2. Préparez l'instruction : Utilisez la méthode prepare() sur l'objet de connexion pour préparer l'instruction SQL. Les espaces réservés (?) représentent les paramètres qui seront remplacés ultérieurement par les entrées de l'utilisateur.
  3. Paramètres de liaison : Utilisez la méthode bind_param() pour lier les paramètres fournis par l'utilisateur (dans ce cas, $_GET ['userid'] et $_GET['category']) aux espaces réservés dans le fichier préparé déclaration.

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";
}
Copier après la connexion

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);
}
Copier après la connexion

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);
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal