Maison >php教程 >PHP开发 >Résumé de la différence entre #{} et ${} dans le passage des paramètres dans Mybatis et de la différence entre # et $

Résumé de la différence entre #{} et ${} dans le passage des paramètres dans Mybatis et de la différence entre # et $

高洛峰
高洛峰original
2017-01-05 17:20:201380parcourir

J'utilise mybatis récemment, et j'ai déjà utilisé ibatis. De manière générale, c'est similaire, mais j'ai quand même rencontré beaucoup de problèmes

Par exemple, utilisez #{. } et ${} pour transmettre les paramètres. La différence,

utilise # pour transmettre les paramètres, l'analyse de l'instruction SQL ajoutera "", par exemple, sélectionnez * dans la table où nom = #{nom}, le le nom transmis est Xiao Li, puis il sera imprimé à la fin. Celui-ci est

select * from table which name = 'Xiao Li', qui sera analysé comme une chaîne. Cela présente des avantages évidents par rapport à. $, n'est-ce pas ? #{} le passage de paramètres peut empêcher l'injection SQL, si les paramètres que vous transmettez sont des guillemets simples, alors si vous utilisez ${}, cette méthode signalera une erreur

Un autre scénario est si. vous souhaitez effectuer un tri dynamique, comme trier par colonne, assurez-vous d'utiliser ${} à ce moment-là, car si vous utilisez #{}, ce qui sera imprimé sera

select * from table order by 'name', qui ne sert à rien.

Actuellement, si vous pouvez utiliser #, n'utilisez pas $.

La différence entre # et $ dans mybatis

1. #Traitez les données entrantes comme une seule chaîne de caractères, un guillemet double sera ajouté aux données automatiquement transmises. Par exemple : trier par #user_id#, si la valeur transmise est 111, alors la valeur analysée dans SQL est triée par "111". Si la valeur transmise est id, le SQL analysé est trié par "id". 🎜>

2. $ affichera et générera directement les données entrantes en SQL. Par exemple : order by $user_id$, si la valeur transmise est 111, alors la valeur analysée dans SQL est order by user_id. Si la valeur transmise est id, le SQL analysé est ordonné par id.


3. La #méthode peut empêcher dans une large mesure l'injection SQL.


4. La méthode $ ne peut pas empêcher l'injection SQL.

5. La méthode $ est généralement utilisée pour transmettre des objets de base de données, tels que des noms de table


6 Si # peut être utilisé, n'utilisez pas $.

Lorsque vous utilisez l'ordre par paramètres dynamiques lors du tri de MyBatis, vous devez faire attention à l'utilisation de $ au lieu de #

remplacement de chaîne

Par défaut, l'utilisation de la syntaxe de format #{} sera oblige MyBatis à créer un attribut d'instruction de prétraitement et à lui définir une valeur sûre (telle que ?). C'est sûr, rapide et préféré, parfois vous souhaitez simplement insérer une chaîne inchangée directement dans l'instruction SQL. Par exemple, comme ORDER BY, vous pouvez l'utiliser comme ceci :

ORDER BY ${columnName}

Ici, MyBatis ne modifiera ni n'échappera la chaîne.

Important : Il est dangereux d'accepter la sortie de l'utilisateur et de la fournir sous forme de chaîne immuable dans l'instruction. Cela conduit à des attaques potentielles par injection SQL, vous ne devez donc pas autoriser les utilisateurs à saisir ces champs, ni généralement à y échapper et à les vérifier vous-même.

Un bref résumé de la différence entre $ et # dans Mybatis

Il n'y a pas longtemps, quelqu'un est venu dans notre entreprise pour un entretien, et notre manager a posé cette question que je ne savais pas grand-chose. à ce sujet, je suis donc allé à Baidu pour faire quelques recherches.

En fait, la différence est très simple. Vous la comprendrez avec un exemple. Écrivez une phrase SQL - par exemple : select * from user_role which user_code = "100";

Pour cette phrase, vous devez écrire select * from ${tableName} which user_code = #{userCode}

Ainsi, le symbole $ est directement épelé dans sql, et le symbole # sera épissé avec sql sous la forme d'une chaîne.

Pour plus d'articles connexes sur la différence entre les paramètres #{} et ${} dans Mybatis et le résumé de la différence entre # et $, veuillez faire attention au PHP Site 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