mysql和php突然区分大小写?

Tim*_*Tim 1 php mysql case-insensitive

基本上,我已经在我的php登录代码中改变了一些东西,现在当我登录时,MySQL要求案例匹配?!

    $match = "select * from users where username = '".$username."' and password = '".$password."';";

    echo $match;
Run Code Online (Sandbox Code Playgroud)

如果我的用户名的CaSe与数据库不匹配,那么它不会返回任何行.

如果用户注册为ADMIN,那么我希望他们能够以"admin"或"AdMiN"等方式登录任何想法?

非常感谢 :)

Mat*_*son 8

我想这个专栏的整理已经改变了.有关字符串比较的大小写敏感性,请参阅此MySQL页面以了解更多信 为了使自己免受类似的问题,例如:

$match = "select * from users where UPPER(username) = '".strtoupper($username)."' and password = '".$password."';";
Run Code Online (Sandbox Code Playgroud)

通常的伎俩.然而,正如其他人所观察到的那样,理解排序规则如何在数据库中运行并适当地使用它是最佳解决方案.正确获取数据库排序并依赖它应该允许数据库使用用户名列上的任何索引,而不是扫描表.

并确保您避免SQL注入攻击 - 如果用户输入包含单引号的用户名,您当前的代码会发生什么?

您可能还想考虑允许哪些字符作为用户名,以及您正在使用的字符集 - "René"是一个有效的用户名?它是否会成功从您的前端传递到数据库并且不受语言设置问题的影响而退出?Joel Spolsky 关于Unicode优秀文章在某些方面可能值得一读.