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 en PHP ?

Comment puis-je récupérer en toute sécurité des données de MySQL à l'aide d'instructions préparées en PHP ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-20 13:07:10476parcourir

How Can I Securely Retrieve Data from MySQL Using Prepared Statements in PHP?

Sécuriser les instructions préparées MySQL en PHP

Lorsque vous travaillez avec des requêtes SQL en PHP, il est crucial de donner la priorité à la sécurité en utilisant des instructions préparées. Voici comment créer une instruction préparée sécurisée pour récupérer des colonnes à l'aide des entrées des paramètres d'URL :

Utiliser MySQL amélioré (MySQLi) :

$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']));
$stmt->execute();

$stmt->store_result();
$stmt->bind_result($column1, $column2, $column3);

while ($stmt->fetch()) {
    echo "col1=$column1, col2=$column2, col3=$column3 \n";
}

$stmt->close();

Vous pouvez également utiliser cette fonction d'assistance pour simplifier le liaison de tableaux associatifs :

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);
}

Pour utiliser it :

$stmt->store_result();

$resultrow = array();
stmt_bind_assoc($stmt, $resultrow);

while ($stmt->fetch()) {
    print_r($resultrow);
}

Amélioration des performances

Les instructions préparées améliorent les performances en minimisant le besoin de réanalyse et de replanification des requêtes. Cependant, l’impact sur la vitesse peut ne pas être significatif s’il n’est utilisé que quelques fois sur une seule page. Néanmoins, cela reste une pratique recommandée pour accroître la sécurité et la protection contre les vulnérabilités d’injection SQL.

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!

Déclaration:
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