一尘不染

SELECT NULL,*,NULL,NULL中令人困惑的SQL错误

sql

背景
我试图解决第四个现实的任务在hackthissite.org,并无法弄清楚到底是什么SQL我应该注入到URL来检索电子邮件列表。浪费了几个小时后,我放弃了,看了一个解决方案,该解决方案给出了这段有趣的代码行,该行代码将在选择查询后注入:

UNION ALL SELECT NULL, *, NULL, NULL FROM email

我了解这样做的原因以及原因;黑客需要创建一个与合并的查询具有相同列数的查询,并在*周围移动以确保显示电子邮件。那不是我的问题。

问题
我的问题是为什么该代码在MySQL中引发语法错误。经过一些测试,我发现这显然是一个有效的查询:

SELECT *, NULL, NULL, NULL FROM email

就这样

SELECT NULL, text, NULL, NULL FROM email

但是由于某种原因,它不是:

SELECT NULL, *, NULL, NULL FROM email

并在“ ,NULL,NULL FROM email
from”附近引发语法错误。我不明白为什么会这样。似乎查询仅在
是请求的第一列时才有效,而与其他列无关。这是一个错误吗?它是MySQL独有的功能(并且任务使用了不同的SQL变体)吗?还是我完全误解了?


阅读 136

收藏
2021-05-30

共1个答案

一尘不染

这是记录的行为:

在选择列表中的其他项目上使用不合格可能会产生解析错误。为避免此问题,请使用合格的tbl_name。参考。

只需按照说明进行操作即可。这应该干净地解析:

 select NULL, email.*, NULL, NULL from email
2021-05-30