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

John Qian

背景
我试图解决第四个现实的任务在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 email”附近引发语法错误。我不明白为什么会这样。似乎查询仅在*是请求的第一列时才有效,而与其他列无关。这是一个错误吗?它是MySQL特有的功能(并且任务使用了不同的SQL变体)吗?还是我完全误解了?

戈登·利诺夫

这是记录的行为:

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

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

 select NULL, email.*, NULL, NULL from email

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章