在 SQL 查詢中動態指定表名是可以實現的,但需要針對 SQL 注入漏洞採取強有力的保護措施。 建議的方法利用內建的 SQL Server 函數:
宣告一個變數來保存表格名稱:
<code class="language-sql"> DECLARE @TableName NVARCHAR(100);</code>
將表格名稱指派給變數:
<code class="language-sql"> SET @TableName = '<[db].><[schema].>tblEmployees';</code>
檢索表的物件 ID:
<code class="language-sql"> SET @TableID = OBJECT_ID(@TableName);</code>
為了安全起見,使用物件 ID 建構 SQL 查詢:
<code class="language-sql"> SET @SQLQuery = 'SELECT * FROM ' + QUOTENAME(OBJECT_NAME(@TableID)) + ' WHERE EmployeeID = @EmpID';</code>
使用 sp_executesql
執行查詢:
<code class="language-sql"> EXECUTE sp_executesql @SQLQuery, @ParameterDefinition, @EmpID;</code>
此方法確保表名已安全處理,透過使用 OBJECT_ID
和 QUOTENAME
在將輸入合併到 SQL 語句之前對其進行清理來防止 SQL 注入攻擊。 將 sp_executesql
與參數化查詢一起使用進一步增強了安全性。
以上是如何在 SQL 查詢中安全地動態設定表名?的詳細內容。更多資訊請關注PHP中文網其他相關文章!