bitsCN.com
5up3rh3iblog
在menzhi007的blog里看到非常有意思的东西:
http:///database/201003/45293.html
在mysql手册里:
phpchina.com/manual/mysql/functions.html#comparison-operators">http://www.phpchina.com/manual/mysql/functions.html#comparison-operators
MySQL按照以下规则进行数值比较:
在默认状态下,字符串比较不区分大小写,并使用现有字符集(默认为cp1252 Latin1,同时对英语也适合)。
为了进行比较,可使用CAST()函数将某个值转为另外一种类型。 使用CONVERT()将字符串值转为不同的字符集。请参见12.8节,“Cast函数和操作符”。
以下例子说明了比较运算中将字符串转为数字的过程:
mysql> SELECT 1 > 6x;
-> 0
mysql> SELECT 7 > 6x;
-> 1
mysql> SELECT 0 > x6;
-> 0
mysql> SELECT 0 = x6;
-> 1
这个如果不注意好确实可以导致安全问题的,比如menzhi007里举的那个列子,如果字符变量查询没有引号,但是用某些函数过滤了不可以直接注射,那么可以直接提交0就可以绕过了...
最后感谢menzhi007及hi群的各大牛的讨论,尤其是ryat牛的指点:)
bitsCN.com