我有一个关于注释掉sql查询的问题。sql查询具有该表单。
$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
因此,我尝试让1' or 1=1; #
和我得到所有的用户和密码,正如我所期望的,但是当我使用--
作为注释而不是#
时,就会出现语法错误。为什么会发生这种事?
您能解释一下在每种情况下sql是如何形成的吗?
我还注意到1' or 1=1 #
也能工作。#符号不评论;?
发布于 2017-03-12 11:58:03
正如您可以在mysql手册中看到的那样
在MySQL中,-- (双破折号)注释样式要求第二个破折号后面至少有一个空格或控制字符(例如空格、制表符、换行符等)。
当只向输入中添加--
时.后面没有空格或控制字符。您的综合查询如下所示:
SELECT first_name, last_name FROM users WHERE user_id = '1' or 1=1--';
如您所见,双破折号后面紧跟着一个;
,这会导致语法错误,因为它不被认为是注释。
试着在最后插入--
(后面有一个空格)
对于;
:在向服务器发出的查询中,这是不必要的。这只是为了分离不同的语句,而不是只需要一条语句。
mysql命令行客户端不向服务器发送该字符,而是将其视为“执行指令”。
https://stackoverflow.com/questions/42746974
复制相似问题