Paramètres de requête et noms de colonnes variables
En Java, à l'aide d'instructions préparées JDBC, on peut rencontrer un scénario dans lequel les noms de colonnes dynamiques doivent être spécifié dans une requête. Malheureusement, il n'est pas possible de définir directement les noms de colonnes comme valeurs d'instructions préparées, car ils attendent à la place des valeurs de colonnes.
Les tentatives de spécification de noms de colonnes comme valeurs entraînent des requêtes telles que :
SELECT a,b,c,'d,e,f' FROM some_table WHERE d='x'
La requête souhaitée serait cependant :
SELECT a,b,c,d,e,f FROM some_table WHERE d='x'
Solution et Considérations
Il est déconseillé d'utiliser des noms de colonnes variables de cette manière car cela peut entraîner des problèmes de conception de base de données et augmenter le risque de vulnérabilités d'injection SQL. Au lieu de cela, envisagez de créer une colonne de base de données dédiée pour contenir ces « noms de colonnes » et stocker les données en conséquence.
Si vous avez toujours besoin de noms de colonnes variables, une solution de contournement consiste à nettoyer l'entrée, à créer la chaîne SQL manuellement, à citer les noms de colonnes et les guillemets d'échappement dans les noms en utilisant String#replace(). N'oubliez pas que cette approche persiste le potentiel de vulnérabilités d'injection SQL, la désinfection est donc cruciale.
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!