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!