J'ai une requête dynamique pour le filtrage, et maintenant j'ai un problème où j'ai besoin d'utiliser dB :: RAW pour la commande par mais maintenant ici j'ai un problème de protection contre l'injection SQL Comment puis-je empêcher Je ne peux pas utiliser < Code> -> Setbindingings Code> 'Parce que j'ai des nombres dinamiques de colonnes filtrantes en fonction de la table p> p> Valeur code> et
$ Colonne code> à partir d'une injection SQL sans utiliser
-> SetBindings P>
3 Réponses :
Vous pouvez utiliser orderbyraw code>
qui acceptera une gamme de liaisons.
$this->query->orderByRaw('POSITION(? IN ?) asc', [$value, $column]);
Vous ne pouvez pas utiliser de paramètres pour les noms de colonne.
Cette solution ne renvoie pas une erreur, mais elle traitera le deuxième paramètre en tant que chaîne littérale, pas le nom d'une colonne. Donc, cela ne fera pas ce que veut l'OP.
Les déclarations préparées ne peuvent pas évaluer les noms de colonnes. Vous devez donc utiliser Whitelisting pour protéger contre les injections en Pour protéger contre la valeur, vous pouvez le forcer à être un entier. ou Type de flottement ou utilisez la commandeByraw qui accepte une gamme de paramètres: p> $ colonne code>.
En fait, je n'ai pas besoin de protection contre $ colonne code> Parce qu'il provient d'un tableau que je crée, ça marche parfaitement, merci
Vous voudrez peut-être mettre $ colonne code> dans les tiques arrière au cas où il correspond à un Word réservé .
Essayez le ci-dessous,
$orderByQuery = "select * from table order by POSITION(:value IN :column) asc"; $this->query->select($orderByQuery, [ "value" => $value, "column" => $column ])