0

所以我在我的网站上有一个 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 一...

4

5 回答 5

1

这是我的意见

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

问题是一个用户注册有 abc,然后另一个用户注册 abc <- 在它后面有一个空格,它说用户名没有被使用,然后当这个人用用户名 ti 后面的空格登录时,他们会正常登录abc 一..

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

于 2013-08-07T21:56:25.947 回答
0

一、对比差异(PHP):

1 == true(将导致真)

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

==只检查相等的值(1 == true返回 true),同时===检查类型(1 === trueis false(Integer vs Boolean))

第二:你的空白问题:

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

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

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

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

特别是,尾随空格很重要,这对于使用 = 运算符执行的 CHAR 或 VARCHAR 比较不正确...

在 Sitenode 上:=在 SQL 中与特定排序规则一起使用可能很有用,fe 当具有特殊字符时:SELECT 'Mass' = 'Maß' Collate utf8_unicode_ci将返回 true,而SELECT 'Mass' LIKE 'Maß' Collate utf8_unicode_ci由于字符串长度不同将返回 false。

于 2013-08-07T22:08:12.543 回答
0

==比较值

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

还要在数据库表列上添加UNIQUE约束username以避免数据库中的重复性。

于 2013-08-07T21:54:50.607 回答
0

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

于 2013-08-07T21:55:02.343 回答
0
  • == 是比较运算符(检查两个变量是否具有相等的值)
  • ===是相同的比较运算符(检查两个变量是否具有相同的值并且属于相同的类型)。

>如果您正在检查用户名结果,应该是

if (mysql_num_rows($result2)>0){
 echo "A Account Is All Ready Here";
} 
于 2013-08-07T21:55:56.413 回答