我想检查数据库中是否存在用户名,但是我遇到了问题Ex:如果我有用户名= jack和另一个具有用户名= JaCk的寄存器
它接受 我想用小写和大写检查完整的用户名,并拒绝这种情况(jack-Jack-JaCk ....)
$stmtr = $DB_con->prepare("SELECT username FROM users WHERE username=:username");
$stmtr->bindparam(":username", $val['username']);
$stmtr->execute();
$row=$stmtr->fetch(PDO::FETCH_ASSOC);
if($rowr['username']==$val['username']) {
echo "Exists";
}
答案 0 :(得分:2)
有一个错字。符合以下条件:
if($rowr['username']==$val['username']) {
应该是:
if($row['username']==$val['username']) {
此外,默认情况下,MySQL执行不区分大小写的查询。请注意数据库整理中的_ci
部分(例如utf8_general_ci
),这意味着不区分大小写。您必须在PHP中执行额外的检查,以检查大小写是否不同。
答案 1 :(得分:1)
if( strtolower($row['username'])==strtolower($val['username']) ) { echo "Exists";}
您还可以将strtolower
替换为strtoupper
,将字符串转换为大写。
注意:对于这种情况,strtolower
和strtoupper
的结果将与@ user3783243指出的结果相同
此外,如果您尝试将两个值与Case Sensitivity
进行比较,即不希望if('JAck'== 'jAck')
返回 true ,则使用严格比较===
>
if('JAck'== 'jAck') //will return true
if('JAck'=== 'jAck') //will retrun false
答案 2 :(得分:0)
您可以在SQL查询中使用UPPER_CASE
:
$stmtr = $DB_con->prepare("SELECT username FROM users WHERE UPPER(username)=:username");
$stmtr->bindparam(":username", strtoupper($val['username']));
但是我认为您应该在用户注册时将username
存储为大写或小写。比在SQL中使用UPPER