Mysql 解释使用变量显示数据库列表的SQL查询
有人能解释一下这个SQL查询是如何工作的吗?我一直在试图弄明白,但无法理解这个查询背后的逻辑Mysql 解释使用变量显示数据库列表的SQL查询,mysql,sql,Mysql,Sql,有人能解释一下这个SQL查询是如何工作的吗?我一直在试图弄明白,但无法理解这个查询背后的逻辑 select (@a) from ( SELECT (@a :="") ,(select (@a) from information_schema.schemata where (@a) in (@a := concat(@a, schema_name, '<br>'))
select (@a)
from ( SELECT (@a :="")
,(select (@a)
from information_schema.schemata
where (@a) in (@a := concat(@a, schema_name, '<br>'))
)
) a
编辑:
问题:如果所有行都不匹配,变量a将如何获得所需的输出
让我们从mytable中选择一个小查询select*,其中有一些条件
如果mytable有10条记录,而somecondition不使用任何索引,那么somecondition将执行10次。基于每次执行,如果结果为true/1,则将显示该行。这是sql select语句的简单理论
现在您可以在@a:=CONCAT@a,schema_name,您将得到答案
编辑:
问题:如果所有行都不匹配,变量a将如何获得所需的输出
让我们从mytable中选择一个小查询select*,其中有一些条件
如果mytable有10条记录,而somecondition不使用任何索引,那么somecondition将执行10次。基于每次执行,如果结果为true/1,则将显示该行。这是sql select语句的简单理论
现在您可以在@a:=CONCAT@a,schema_name,您将得到答案它不是SQL注入。只是SQLYeah,我试着学习SQL注入,所以在流程中包括注入。我…在流程中包括注入,在你看来,注入在哪里?这只是SQL。注入是指使用其他一些代码(如PHP或C)生成SQL,并且该代码允许来自变量(如SQL)的任意内容,该变量不打算在未检查的情况下插入生成的SQL字符串。你说你不理解这个查询,但又说你在流程中包含了注入……那么这是否意味着你改变了什么?原作是什么样子的?如果不是您上面描述的结果,您希望从中得到什么结果?我的意思是我在流程中包含了单词injection。顺便说一句,取下它是为了方便。谢谢。我觉得他的问题很直截了当。在mysql上运行此查询的任何人都将看到输出。OP只需要解释一下它是如何工作的!。为什么要投反对票?想解释一下吗?这不是SQL注入。只是SQLYeah,我试着学习SQL注入,所以在流程中包括注入。我…在流程中包括注入,在你看来,注入在哪里?这只是SQL。注入是指使用其他一些代码(如PHP或C)生成SQL,并且该代码允许来自变量(如SQL)的任意内容,该变量不打算在未检查的情况下插入生成的SQL字符串。你说你不理解这个查询,但又说你在流程中包含了注入……那么这是否意味着你改变了什么?原作是什么样子的?如果不是您上面描述的结果,您希望从中得到什么结果?我的意思是我在流程中包含了单词injection。顺便说一句,取下它是为了方便。谢谢。我觉得他的问题很直截了当。在mysql上运行此查询的任何人都将看到输出。OP只需要解释一下它是如何工作的!。为什么要投反对票?想解释一下吗?谢谢,这是我需要的。你解释得很好。我很高兴我帮了忙!您能否解释一下,如果没有一行匹配,变量a将如何获得所需的输出?另外,您如何确定查询的执行优先级?@Akash,我已经更新了我的答案,并进行了更详细的说明。谢谢,这是我所需要的。你解释得很好。我很高兴我帮了忙!您能否解释一下,如果没有一行匹配,变量a将如何获得所需的输出?另外,您如何确定查询的执行优先级?@Akash,我已经详细更新了我的答案
SELECT
@a -- Final Result (3)
FROM
(
SELECT (@a :="") -- Resetting the variable after each run, (1)
(
SELECT @a -- Does really nothing. This can be anything
FROM information_schema.schemata
WHERE (@a) IN (@a := CONCAT(@a, schema_name, '<br>')) -- This will be executed for each row. But none of the rows will match. At the end, @a will have the desired output (2)
)
) a
SET @a = "";
SELECT 1 FROM information_schema.schemata WHERE (@a) IN (@a := CONCAT(@a, schema_name, '<br>'));
SELECT @a;