Requête SQL dynamique : utiliser des paramètres pour définir les noms de tables
Lors du traitement de requêtes SQL dynamiques, il est généralement nécessaire de définir dynamiquement le nom de la table en fonction des paramètres d'entrée. Bien que la définition de paramètres tels que les ID soit simple, la définition des noms de table peut présenter des défis.
Tentative échouée :
L'approche initiale démontrée dans le code fourni consiste à définir le nom de la table directement dans la chaîne de requête SQL. Cependant, cette approche est vulnérable aux attaques par injection SQL.
Solution utilisant la fonction OBJECT_ID :
Pour garantir la sécurité et éviter les injections SQL malveillantes, il est recommandé d'utiliser la fonction OBJECT_ID pour analyser dynamiquement l'ID d'objet du nom de la table. Ce faisant, les noms de table mal formés ou injectés ne seront pas résolus, évitant ainsi les vulnérabilités de sécurité.
Voici le code mis à jour :
<code class="language-sql">... SET @TableName = '<[db].><[schema].>tblEmployees' SET @TableID = OBJECT_ID(@TableName) --如果格式错误/注入,则不会解析。 ... SET @SQLQuery = 'SELECT * FROM ' + QUOTENAME(OBJECT_NAME(@TableID)) + ' WHERE EmployeeID = @EmpID'</code>
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!