SQL注入常見函數


SQL注入常見函數

首先SQL語句對大小寫不敏感,這也導致了后台程序對大小寫的檢測失效。

SQL 注釋語句 ("--"與"/*...*/")

(1)--:表示單行注釋

(2)/*…*/:用於多行(塊)注釋

  • SELECT 查詢語句

SQL SELECT 語法

SELECT 列名稱 FROM 表名稱
SELECT * FROM 表名稱
  • UNION 操作符

UNION 操作符用於合並兩個或多個 SELECT 語句的結果集。

請注意,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的數據類型。同時,每條 SELECT 語句中的列的順序必須相同。

SQL UNION 語法

 
SELECT column_name(s) FROM table_name1
 
UNION
 
SELECT column_name(s) FROM table_name2

注釋:默認地,UNION 操作符選取不同的值。如果允許重復的值,請使用 UNION ALL。

  • concat()

CONCAT 函數用於將兩個字符串連接為一個字符串

1、語法及使用特點:
CONCAT(str1,str2,…) 
返回結果為連接參數產生的字符串。如有任何一個參數為NULL ,則返回值為 NULL。可以有一個或多個參數。

2、使用示例:
SELECT CONCAT(id, ‘,’, name) AS con FROM info LIMIT 1;
  • concat_ws()

使用函數CONCAT_WS()。

使用語法為:CONCAT_WS(separator,str1,str2,…)
CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一個參數是其它參數的分隔符。分隔符的位置放在要連接的兩個字符串之間。分隔符可以是一個字符串,也可以是其它參數。如果分隔符為 NULL,則結果為 NULL。函數會忽略任何分隔符參數后的 NULL 值。但是CONCAT_WS()不會忽略任何空字符串。 (然而會忽略所有的 NULL)。

如SELECT CONCAT_WS('_',id,name) AS con_ws FROM info LIMIT 1;
  • group_concat()

GROUP_CONCAT函數返回一個字符串結果,該結果由分組中的值連接組合而成。
使用表info作為示例,其中語句SELECT locus,id,journal FROM info WHERE locus IN('AB086827','AF040764');的返回結果為
+----------+----+--------------------------+
 
| locus | id | journal |
 
+----------+----+--------------------------+
 
| AB086827 | 1 | Unpublished |
 
| AB086827 | 2 | Submitted (20-JUN-2002) |
 
| AF040764 | 23 | Unpublished |
 
| AF040764 | 24 | Submitted (31-DEC-1997) |
 
+----------+----+--------------------------+

1、使用語法及特點:

GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] [,col ...]]
[SEPARATOR str_val])
在 MySQL 中,你可以得到表達式結合體的連結值。通過使用 DISTINCT 可以排除重復值。如果希望對結果中的值進行排序,可以使用 ORDER BY 子句。
SEPARATOR 是一個字符串值,它被用於插入到結果值中。缺省為一個逗號 (","),可以通過指定 SEPARATOR "" 完全地移除這個分隔符。
可以通過變量 group_concat_max_len 設置一個最大的長度。在運行時執行的句法如下: SET [SESSION | GLOBAL] group_concat_max_len = unsigned_integer;
如果最大長度被設置,結果值被剪切到這個最大長度。如果分組的字符過長,可以對系統參數進行設置:SET @@global.group_concat_max_len=40000;

2、使用示例:

語句 SELECT locus,GROUP_CONCAT(id) FROM info WHERE locus IN('AB086827','AF040764') GROUP BY locus;的返回結果為
 
+----------+------------------+
 
| locus | GROUP_CONCAT(id) |
 
+----------+------------------+
 
| AB086827 | 1,2 |
 
| AF040764 | 23,24 |
 
+----------+------------------+
 
語句 SELECT locus,GROUP_CONCAT(distinct id ORDER BY id DESC SEPARATOR '_') FROM info WHERE locus IN('AB086827','AF040764') GROUP BY locus;的返回結果為
 
+----------+----------------------------------------------------------+
 
| locus | GROUP_CONCAT(distinct id ORDER BY id DESC SEPARATOR '_') |
 
+----------+----------------------------------------------------------+
 
| AB086827 | 2_1 |
 
| AF040764 | 24_23 |
 
+----------+----------------------------------------------------------+
 
  • order by

ORDER BY 語句用於根據指定的列對結果集進行排序。

ORDER BY 語句默認按照升序對記錄進行排序。

如果您希望按照降序對記錄進行排序,可以使用 DESC 關鍵字。

實例:以(逆)字母順序顯示公司名稱

SELECT Company, OrderNumber FROM Orders ORDER BY Company (DESC
  • group by

GROUP BY 語句用於結合合計函數,根據一個或多個列對結果集進行分組。

SQL GROUP BY 語法

 
SELECT column_name, aggregate_function(column_name)
 
FROM table_name
 
WHERE column_name operator value
 
GROUP BY column_name
  • 對XML文檔進行查詢和修改的函數extractvalue() 和 updatexml()
EXTRACTVALUE(XML_document, XPath_string);

UPDATEXML(XML_document, XPath_string, new_value);
  • if()

語法:IF(expr1,expr2,expr3)

其中,expr1是判斷條件,expr2和expr3是符合expr1的自定義的返回結果。

例如:

select

if(il.status_id = 'INV_STTS_AVAILABLE','全新','二手') as status_id

from inventory_location as il;
  • sleep()

執行select sleep(N)可以讓此語句運行N秒鍾

  • left()

LEFT(str,len)

返回最左邊的n個字符的字符串str,或NULL如果任何參數是NULL。

SELECT LEFT('foobarbar', 5);
  • count()

COUNT(column_name) 語法

COUNT(column_name) 函數返回指定列的值的數目(NULL 不計入):

SELECT COUNT(column_name) FROM table_name
SQL COUNT(*) 語法

COUNT(*) 函數返回表中的記錄數:
SELECT COUNT(*) FROM table_name
SQL COUNT(DISTINCT column_name) 語法

COUNT(DISTINCT column_name) 函數返回指定列的不同值的數目:
SELECT COUNT(DISTINCT column_name) FROM table_name

注釋:COUNT(DISTINCT) 適用於 ORACLE 和 Microsoft SQL Server,但是無法用於 Microsoft Access。

  • floor()

FLOOR() - 返回最大整數,使這個整數小於或等於指定數的數值運算。

  • round()

 ROUND() – 四舍五入一個正數或者負數,結果為一定長度的值。

  • rand()

SQL 有一個 RAND 函數,用於產生 0 至 1 之間的隨機數

  • length()

返回字符串的長度,以字節為單位

語法:

LENGTH(string)
  • extract()

EXTRACT() 函數用於返回日期/時間的單獨部分,比如年、月、日、小時、分鍾等等。

EXTRACT(unit FROM date)

date 參數是合法的日期表達式。unit 參數可以是下列的值:

Unit 值
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM