Instruction préparée PDO : définition des paramètres ORDER BY
Lorsque vous travaillez avec des instructions SQL en PHP à l'aide d'instructions préparées PDO, définissez les paramètres dans ORDER BY la clause peut être délicate. Contrairement à d'autres paramètres, qui peuvent être liés à l'aide de méthodes telles que bindParam(), PDO ne fournit pas de moyen direct de spécifier des paramètres pour ORDER BY.
Pour résoudre ce problème, il est nécessaire d'insérer directement les valeurs d'ordre et de direction. dans la chaîne SQL. Cependant, cette approche peut potentiellement introduire des vulnérabilités d'injection SQL si les entrées de l'utilisateur ne sont pas correctement nettoyées.
Approche de prudence
La méthode la plus sécurisée consiste à coder en dur le ORDER BY critères dans la chaîne SQL, comme ceci :
$order = 'columnName'; $direction = 'ASC'; $query = "SELECT field from table WHERE column = :my_param ORDER BY $order $direction"; $stmt = $db->prepare($query); $stmt->bindParam(':my_param', $is_live, PDO::PARAM_STR); $stmt->execute();
Custom Helper Fonction
Une approche alternative consiste à créer une fonction d'assistance personnalisée qui liste blanche les valeurs acceptables pour les paramètres ORDER BY. Cela garantit que seules les valeurs valides sont utilisées et atténue le risque d'injection SQL.
function white_list($value, array $whitelist, $errorMessage) { if (!in_array($value, $whitelist)) { throw new Exception($errorMessage); } return $value; } $order = white_list($_GET['sort'], ["name", "price", "qty"], "Invalid field name"); $direction = white_list($_GET['direction'], ["ASC", "DESC"], "Invalid ORDER BY direction"); $sql = "SELECT field from table WHERE column = ? ORDER BY $order $direction"; $stmt = $db->prepare($sql); $stmt->execute([$is_live]);
Cette fonction d'assistance vérifie la validité des paramètres ORDER BY et lève une exception si une valeur non valide est détectée.
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!