Menentukan nama jadual secara dinamik dalam pertanyaan SQL boleh dicapai, tetapi memerlukan perlindungan yang teguh terhadap kelemahan suntikan SQL. Pendekatan yang disyorkan memanfaatkan fungsi SQL Server terbina dalam:
Isytiharkan pembolehubah untuk menyimpan nama jadual:
<code class="language-sql"> DECLARE @TableName NVARCHAR(100);</code>
Tetapkan nama jadual kepada pembolehubah:
<code class="language-sql"> SET @TableName = '<[db].><[schema].>tblEmployees';</code>
Dapatkan ID objek jadual:
<code class="language-sql"> SET @TableID = OBJECT_ID(@TableName);</code>
Bina pertanyaan SQL menggunakan ID objek untuk keselamatan:
<code class="language-sql"> SET @SQLQuery = 'SELECT * FROM ' + QUOTENAME(OBJECT_NAME(@TableID)) + ' WHERE EmployeeID = @EmpID';</code>
Laksanakan pertanyaan menggunakan sp_executesql
:
<code class="language-sql"> EXECUTE sp_executesql @SQLQuery, @ParameterDefinition, @EmpID;</code>
Kaedah ini memastikan bahawa nama jadual dikendalikan dengan selamat, menghalang serangan suntikan SQL dengan menggunakan OBJECT_ID
dan QUOTENAME
untuk membersihkan input sebelum ia dimasukkan ke dalam pernyataan SQL. Penggunaan sp_executesql
dengan pertanyaan berparameter mengukuhkan lagi keselamatan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Tetapkan Nama Jadual Secara Selamat dalam Pertanyaan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!