SQL中 與 的區別

2022-02-21 19:35:45 字數 1027 閱讀 2033

區別:

(1)#將傳入的資料都當成乙個字串,會對自動傳入的資料加乙個雙引號。如:order by #user_id#,如果傳入的值是id,則解析成的sql為order by "id"。

(2)$將傳入的資料直接顯示生成在sql中。如:order by $user_id$,如果傳入的值是id,則解析成的sql為order by id。

(3)#方式在很大程度上能夠防止sql注入。

(4)$方式無法防止sql注入。

(5)$方式一般用於傳入資料庫物件,例如傳入表名。(這裡得注意sql注入問題

(6)一般能用#的就別用$。

ps:在使用mybatis中還遇到的用法,在該符號內的語句,將不會被當成字串來處理,而是直接當成sql語句,比如要執行乙個儲存過程。

總結區別:#{} 傳入值時,sql解析時,引數是帶引號的,而${}穿入值,sql解析時,引數是不帶引號的。

舉個例子:

select * from $ where name = #

在這個例子中,如果表名為

user; delete user; --

則動態解析之後 sql 如下:

select * from user;deleteuser; -- where name = ?;

--之後的語句被注釋掉,而原本查詢使用者的語句變成了查詢所有使用者資訊+刪除使用者表的語句,會對資料庫造成致命損傷。

但是表名用引數傳遞進來的時候,只能使用 ${} 。這也提醒在這種用法中要小心sql注入的問題。

防止sql注入方法:

首先,永遠不要相信使用者的輸入。

(1)不使用sql,考慮nosql。

(2)正規表示式,字串過濾。

(3)引數繫結preparedstatement。

(4)使用正規表示式過濾傳入的引數。

(5)jsp中呼叫該函式檢查是否包函非法字元或jsp頁面判斷**。jsp參考jsp使用過濾器防止sql注入

以上個人拙作,希望能給路上同仁帶去點光。

sql中 與 的區別

在這裡用到了 使用 時 1 用來傳入引數,sql在解析的時候會加上 當成字串來解析 如這裡 role id roleid 2 能夠很大程度上防止sql注入 延伸 1 用傳入資料直接顯示在生成的sql中,如上面的語句,用roleid 傳入資料直接顯示在生成的sql中,如上面的語句,用roleid 那麼...

sql中exist與in的區別

in 和 exists也是很好區別的.in 是乙個集合運算子.a in 這個運算中,前面是乙個元素,後面是乙個集合,集合中的元素型別是和前面的元素一樣的.而exists是乙個存在判斷,如果後面的查詢中有結果,則exists為真,否則為假.in 運算用在語句中,它後面帶的select 一定是選乙個字段...

sql中exist與in的區別

in 和 exists也是很好區別的.in 是乙個集合運算子.a in 這個運算中,前面是乙個元素,後面是乙個集合,集合中的元素型別是和前面的元素一樣的.而exists是乙個存在判斷,如果後面的查詢中有結果,則exists為真,否則為假.in 運算用在語句中,它後面帶的select 一定是選乙個字段...