关于sql语句的闭合方式

前言
以前一直以为字符型的SQL语句只能用单引号或双引号闭合,数值型可以不用闭合。以为php的SQL语句能用括号闭合是因为PHP的特性。自己的基础实在不行。
准备:
建一张包含数值型和字符型字段的表,并插入数据。
这里有一个在线测试sql语句的网站(http://sqlfiddle),含有以下数据库运行环境,很方便。

左边输入框执行建库、表、添加数据等操作,右边执行查询语句,如show、select。

常用闭合方式:
单引号''、双引号""、括号()、括号+单引号('')、多层括号+单引号,例((((((((''))))))))。另外mysql还可以使用括号+双引号("")和多层括号+双引号((((((((""))))))))
以下为分别测试数值型与字符型的实际结果:

数值型mysqlmssqloraclePostgreSQL
''
""
()
('')
((((((((''))))))))
("")
((((((((""))))))))
字符型 mysqlmssqloraclePostgreSQL
''
""
()
('')
((((((((''))))))))
("")
((((((((""))))))))

附上多层括号的测试结果图,及各数据库的注释用法(测试版本不同可能影响实际操作结果):
mysql5.6:

#单行注释
-- 单行注释(后有空格)
/*多行注释*/ 


ms sql server2017:

--单行注释(无空格)
/*多行注释*/


Oracle 11g R2:

/*多行注释*/  
--单行注释(无空格)
REM单行注释,注释的是在它之后包含sql语句的那一行


(ps:第一次知道火狐浏览器滚动截图)
PostgreSQL 9.3:

--单行注释
/*多行注释*/ 


在做sqli靶场的时候会有以上闭合情况,可设置字典或手动测试闭合方式。

(注:本人菜鸡,个人见解,如有错误,欢迎评论指出)
参考文章:
各种数据库的注释
关于sql注入语句闭合的一些见解

更多推荐

关于sql语句的闭合方式