Maison > Questions et réponses > le corps du texte
巴扎黑2017-04-18 10:46:56
SÉLECTIONNER
*
DE
test
OÙ
1 = 1
ET NOM COMME concat(
'%',
(
CASE
WHEN NAME(传进来的name) IS NULL THEN
'#################'(数据库name不可能的值)
ELSE
NAME(传进来的name)
END
),
'%')
J'ai écrit un dépannage pour le nom, vous pouvez vérifier l'autre vous-même, ce n'est peut-être pas la meilleure solution
大家讲道理2017-04-18 10:46:56
Je ne sais pas si un framework de base de données est utilisé. Si c'est le cas, il existe généralement des solutions correspondantes.
Par exemple, dans mybatis, vous pouvez utiliser iftest pour déterminer si l'instruction like doit être exécutée.
Une autre méthode consiste à utiliser les fonctions de la base de données elle-même, comme IF (expr1, expr2, expr3) ou IF ELSE
天蓬老师2017-04-18 10:46:56
S'il n'y a pas de paramètres d'entrée au front-end, pourquoi avez-vous besoin d'interroger les résultats de ce champ ? Cela ne viole-t-il pas la logique métier ?
天蓬老师2017-04-18 10:46:56
where IFNULL(name, '') like'%xx%' and IFNULL(method, '') like '%xx%'
Si name
est null
et convertissez-le en empty string
, alors %%
correspondra.
Cependant, je pense que le meilleur moyen est d'utiliser SQL
pour ajouter un jugement logique. Le nombre de modifications doit être très faible et cela ne nécessite que quelques lignes de code. Le questionneur peut jeter un œil au SQL de @家菜菜 et ajouter une condition where 1=1
Il sera alors très simple d'ajouter une condition à la condition if
.
ringa_lee2017-04-18 10:46:56
Il est préférable de l'écrire dans la couche de logique métier (c'est ce que cette couche est censée faire). Ne gérez pas ce genre de chose dans la couche de base de données. C'est très déraisonnable et inefficace.
ringa_lee2017-04-18 10:46:56
Le moyen simple est de convertir la valeur nulle du tableau en ''where ifnull(name,'') like'%%' and ifnull(method,'') like '%%'
Si vous ne tenez pas compte de l'efficacité, tout ira bien
PHP中文网2017-04-18 10:46:56
Le questionneur souhaite simplement intégrer les conditions de requête sur l'interface dans la condition Where de l'instruction SQL. Ceci est en effet très pratique dans le traitement du programme. Cependant, pour des raisons de sécurité, il est préférable de ne pas le faire car il existe du SQL. risque d'injection.
S'il s'agit d'une application interne, l'environnement est en effet très sécurisé Compte tenu des performances, il est quand même recommandé de gérer la logique d'épissage du code SQL. Sans ce paramètre, n'épelez pas la clause Where correspondante. si c'est Java, il peut s'écrire comme :
String whereClause = "where xxxxxx"
+("".equals(nameStr) ? "" : "name like '%"+nameStr+"%'")
+("".equals(methodStr) ? "" : "method like '%"+methodStr+"%'")
*Voici les hypothèses :
nameStr et methodStr sont respectivement le contenu d'entrée de l'utilisateur obtenu à partir de l'interface. Si l'utilisateur ne saisit pas, le résultat sera une chaîne vide au lieu de null
xxxxxx sont d'autres conditions Where. S'il n'y a vraiment pas d'autres conditions, alors vous devez gérer la chaîne "where" elle-même*
怪我咯2017-04-18 10:46:56
Si la valeur par défaut de la base de données est nulle, ou lorsque la valeur obtenue est nulle, remplacez-la par nu. .