Mysql 为什么SQL查询在select查询中使用backtick时返回表数据?

Mysql 为什么SQL查询在select查询中使用backtick时返回表数据?,mysql,sql,Mysql,Sql,我正在解决一个CTF挑战,它使用SQL查询中使用的Javascript对象,但我不太明白它为什么能工作。以下是我使用的命令 mysql> select * from myTable; +----+------------+-------------+ | id | first | second | +----+------------+-------------+ | 1 | first_data | second_data | | 2 | third_data |

我正在解决一个CTF挑战,它使用SQL查询中使用的Javascript对象,但我不太明白它为什么能工作。以下是我使用的命令

mysql> select * from myTable;
+----+------------+-------------+
| id | first      | second      |
+----+------------+-------------+
|  1 | first_data | second_data |
|  2 | third_data | fourth_data |
+----+------------+-------------+
2 rows in set (0.00 sec)

mysql> select * from myTable where first = `second` = 'anyString';
+----+------------+-------------+
| id | first      | second      |
+----+------------+-------------+
|  1 | first_data | second_data |
|  2 | third_data | fourth_data |
+----+------------+-------------+
2 rows in set, 1 warning (0.01 sec)

mysql> select * from myTable where first = `first` = 'anyString';
Empty set, 1 warning (0.00 sec)

mysql> 

此表达式未达到预期效果:

first = `second` = 'anyString'
这被解析为:

first = (`second` = 'anyString')
(我意识到这在技术上可能是:
(first=second)='anyString'
,但这不会改变解释。)

一般来说:

first = false
因为MySQL将布尔值视为数字,这相当于:

first = 0
第一个被隐式转换为一个数字。隐式转换转换前导数字。如果没有,则为
0
。因此,这变成:

0 = 0
瞧!返回所有数据