php中的if语句不同

时间:2013-08-07 21:51:06

标签: php mysql sql

所以我在我的网站上有一个php注册脚本,这是我今天注意到有人注册了相同用户名的mysql有一个工作人员。我已经尝试过这样做我的自己但if语句停止了我但是有些他们如何通过它所以我只需要问如果在php中= =和===之间的差异我认为我读了一些是如果我使用===它会使它完全正确。

// here we check to see if the username is all ready in the db
    $sql2 = "SELECT `username` FROM `users` WHERE `username` = '" . $user2. "'";
    $result2 = mysql_query($sql2) or die(mysql_error());

    if (mysql_num_rows($result2)==1) { 
        echo "A Account Is All Ready Here";
    } else {
    //
now we made the account

}

我知道我应该转移到pdo我想也许这会解决它

// here we check to see if the username is all ready in the db
    $sql2 = "SELECT `username` FROM `users` WHERE `username` = '" . $user2. "'";
    $result2 = mysql_query($sql2) or die(mysql_error());

    if (mysql_num_rows($result2)===1) { 
        echo "A Account Is All Ready Here";
    } else {


}

问题是一个用户注册了abc,然后另一个注册用abc< - 后面有一个空格,它表示用户名没有被使用,然后当用户登录时用户名ti将登录他们进入正常的abc ......

5 个答案:

答案 0 :(得分:1)

这是我的意见

  • 即使您不使用PDO,至少使用mysql_real_escape_string($user2)
  • 使用>是一个更好的解决方案if (mysql_num_rows($result2) > 0)因为如果有两个或多个重复帐户,您的情况将被破坏。
  • 最佳解决方案是将username字段作为UNIQUE放在数据库中。
  

问题是一个用户注册的是abc,然后是另一个   注册abc< - 后面有一个空格,它表示用户名   没有使用,然后当人登录后的空格   用户名ti将登录到正常的abc ..

解决方案是构建用户名验证。您需要指定允许用户名的字符集。例如:仅字母,数字和下划线。如果用户注册了不支持的字符,请给他一条错误消息。

答案 1 :(得分:0)

==比较值

===比较值和类型,然后'1'不是1通常在php中

还在UNIQUE数据库表列上添加username约束,以避免在数据库中出现重复。

答案 2 :(得分:0)

==运算符只是检查左右值是否相等。但是,===运算符(注意额外的“=”)实际检查左边和右边的值是否相等,并检查它们是否属于相同的变量类型

答案 3 :(得分:0)

  • == 是比较运算符(检查是否 两个变量具有相等的值)
  • ===是完全相同的比较 运算符(检查两个变量 具有相同的价值并且是相同的 类型)。

如果您要检查用户名结果,则应为>

if (mysql_num_rows($result2)>0){
 echo "A Account Is All Ready Here";
} 

答案 4 :(得分:0)

首先,比较差异(PHP):

1 == true(将导致为真)

1 === true(会导致错误)

==只检查相等的值(1 == true返回true),而===也检查类型(1 === truefalse(整数vs布尔型))

第二:你的空白问题:

如果您使用的是MYSQL =,那并不意味着值必须100%相等。

SELECT 'abc ' = 'abc'将返回单个字段1,因为ist线程相等。 请改为使用Like比较:SELECT 'abc ' LIKE 'abc'将返回0

原因:=不关心尾随空格。 LIKE会这样做。

  

根据SQL标准,LIKE基于每个字符执行匹配,   因此它可以产生与=比较运算符不同的结果:

     

特别是,尾随空格很重要,但事实并非如此   使用=运算符...

执行CHAR或VARCHAR比较

在Sitenode上:在SQL中使用=以及某个整理可能很有用,例如。什么时候 特殊字符:SELECT 'Mass' = 'Maß' Collate utf8_unicode_ci将返回true,而SELECT 'Mass' LIKE 'Maß' Collate utf8_unicode_ci将因字符串长度不同而返回false。