Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql和php是否区分大小写?_Php_Mysql_Case Insensitive - Fatal编程技术网

mysql和php是否区分大小写?

mysql和php是否区分大小写?,php,mysql,case-insensitive,Php,Mysql,Case Insensitive,基本上,我在php登录代码中做了一些更改,现在当我登录时,MySQL要求大小写匹配 $match = "select * from users where username = '".$username."' and password = '".$password."';"; echo $match; 如果我的用户名的大小写与数据库不匹配,则它不会返回任何行 如果用户注册为管理员,那么我希望他们能够以管理员或管理员等身份登录。有什么想法吗 非常感谢:我想该列的排序规则已经更改

基本上,我在php登录代码中做了一些更改,现在当我登录时,MySQL要求大小写匹配

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

    echo $match;
如果我的用户名的大小写与数据库不匹配,则它不会返回任何行

如果用户注册为管理员,那么我希望他们能够以管理员或管理员等身份登录。有什么想法吗


非常感谢:

我想该列的排序规则已经更改了。请参阅以了解更多信息。要使自己远离这样的问题,可以采取以下措施:

$match = "select * from users where UPPER(username) = '".strtoupper($username)."' and password = '".$password."';";
这是惯常的伎俩。不过,正如其他人所观察到的,了解排序规则在数据库中的工作方式并适当地使用它是最好的解决方案。正确使用数据库排序规则并依赖它应该允许数据库使用用户名列上的任何索引,而不是扫描表

还要确保您避免了攻击——如果用户输入包含单个引号的用户名,您当前的代码会发生什么情况


你可能还想考虑你将允许哪些字符作为用户名,以及你使用的字符集是什么?它是否会成功地从前端通过数据库,并在不受字符集问题困扰的情况下退出?乔尔·斯波尔斯基的可能在某个时候值得一读。

我想,该专栏的排序规则已经改变了。请参阅以了解更多信息。要使自己远离这样的问题,可以采取以下措施:

$match = "select * from users where UPPER(username) = '".strtoupper($username)."' and password = '".$password."';";
这是惯常的伎俩。不过,正如其他人所观察到的,了解排序规则在数据库中的工作方式并适当地使用它是最好的解决方案。正确使用数据库排序规则并依赖它应该允许数据库使用用户名列上的任何索引,而不是扫描表

还要确保您避免了攻击——如果用户输入包含单个引号的用户名,您当前的代码会发生什么情况


你可能还想考虑你将允许哪些字符作为用户名,以及你使用的字符集是什么?它是否会成功地从前端通过数据库,并在不受字符集问题困扰的情况下退出?Joel Spolsky的可能在某个时候值得一读。

用户名的排序规则是什么?用户名的排序规则是什么?出于性能原因,最好确保排序规则是正确的,但如果无法更改表,您的解决方案是修复不良设计的好方法@大卫:是的,绝对是。恭喜你有了一个用户名,说明了我对unicode字符的看法:D…其中username='$username'COLLATE utf8_general_ci更优雅,允许查询使用索引。当然要使用你的排序规则need@Mchl@David我已经更新了有关性能影响的信息@Mchl-您确定这将允许使用索引吗?我原以为,如果在查询中动态更改列排序规则,那么使用现有的非CI索引会有问题?好的,测试一下。将不使用该索引。遗憾的是,我无法再编辑注释。出于性能原因,最好确保排序规则正确,但如果您无法更改表,您的解决方案是修复不良设计的好方法@大卫:是的,绝对是。恭喜你有了一个用户名,说明了我对unicode字符的看法:D…其中username='$username'COLLATE utf8_general_ci更优雅,允许查询使用索引。当然要使用你的排序规则need@Mchl@David我已经更新了有关性能影响的信息@Mchl-您确定这将允许使用索引吗?我原以为,如果在查询中动态更改列排序规则,那么使用现有的非CI索引会有问题?好的,测试一下。将不使用该索引。可惜我不能再编辑评论了。