Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 解释使用变量显示数据库列表的SQL查询_Mysql_Sql - Fatal编程技术网

Mysql 解释使用变量显示数据库列表的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>'))

有人能解释一下这个SQL查询是如何工作的吗?我一直在试图弄明白,但无法理解这个查询背后的逻辑

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;