更好地检查区分大小写条目的SQL条目

时间:2014-08-19 22:52:13

标签: php html mysql login registration

背景

我有一个网络程序,它有一个管理员面板,允许当前登录的用户为其他用户向系统添加新的登录名和密码。在处理一些代码的过程中,我发现虽然我检查了相同的代码,但最初的代码是'并且'最后'名称,以及相同的用户名'在系统中,我目前没有检查用户' Bilbo Baggins'应该' bilbo baggins'被检查。

从理论上讲,我可以做两次检查所有相似之处......无论是bilbo baggins' bilbo baggins' bilbo baggins'或者' BILBO BAGGINS' ...但我认为有更好的方法来做到这一点,而不是重写相同的代码来检查相同的信息。

使用我当前的实现,是否有人有类似的情况要检查1)系统中没有保留相同的名字和姓氏,2)相同的用户名不存在?

CODE:

...set all variables used in post...

try {
    //Confirm that there are no other same first and last names with the same registration
    $query = $general->db->prepare("SELECT * FROM users WHERE firstname = :firstname AND lastname = :lastname");
    $names  =  array(
      'firstname' => $firstname,
      'lastname' => $lastname);
  $query->execute($names);
  $result = $query->fetchAll();

      if (sizeof($result) == 0) {
          //Now check that the username isn't currently in use
          $query = $general->db->prepare('SELECT * FROM users WHERE username = :username');
          $username = array('username' => $username);
          $query->execute($username);
          $usernames_exist = $query->fetchAll();

          if (sizeof($usernames_exist) == 0) {
          ##both fullname test as well as username check passed, so allow user to enter the information
            $addedUser = $users->register_user($firstname, $lastname, $username['username'], $password, $cellphone, $seclvl, $email, $direct, $extension);
            $message = "Congratulations, you have successfully added **AN ALREADY ACTIVATED** user with the following information: <br><br>";   

2 个答案:

答案 0 :(得分:0)

MySQL WHERE子句默认情况下不区分大小写。所以......

  • Bilbo_Baggins
  • bilbo_baggins
  • bILBO_BaggINS
  • BILBO_BAGGINS

...只会在db中找到包含'bilbo_baggins'的一条记录。只需确保该字段具有UNIQUE索引。

有关详细信息,请参阅here

答案 1 :(得分:0)

为了让您的系统正常运行,您无需检查姓/名。但现在回过头来看看。

您可以做的是以小写形式将所有文本输入数据库。拔出后,您可以将文本格式化为正确的格式。

这允许您的所有数据以相同的方式运行,因此您不必进行如此多的检查。