代码之家  ›  专栏  ›  技术社区  ›  Saladin Akara

在mySQL数据库中检查现有用户的最佳方法?

  •  4
  • Saladin Akara  · 技术社区  · 14 年前

    function createUser($uname,$pword) {
            $server->connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
            $this->users = $server->query("SELECT * FROM user_list");
            while ($check = mysql_fetch_array($this->users) {
                if ($check['uname'] == $uname) {
    

    我不确定的是这样做的最佳逻辑。我正在考虑添加一个布尔变量来执行以下操作(在if语句之后):

    $boolean = true;
    }
    if ($boolean) {
        echo "User already exists!";
        }
    else {
        $server->query("INSERT USER INTO TABLE");
        echo "User added Successfully";
        }
    

    但这似乎有点低效-有没有更有效的方法来做到这一点?抱歉,如果这有一个基本的解决方案-我是一个相对较新的PHP程序员。

    2 回复  |  直到 11 年前
        1
  •  7
  •   Gumbo    14 年前

    使用 WHERE 子句仅获取具有给定用户名的行:

    "SELECT * FROM user_list WHERE uname='".$server->real_escape_string($uname)."'"
    

    然后检查查询是否导致选择具有 MySQLi_Result::num_rows :

    function createUser($uname,$pword) {
        $server->connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
        $result = $server->query("SELECT * FROM user_list WHERE uname='".$server->real_escape_string($uname)."'");
        if ($result->num_rows() === 0) {
            if ($server->query("INSERT INTO user_list (uname) VALUES ('".$server->real_escape_string($uname)."'")) {
                echo "User added Successfully";
            } else {
                echo "Error while adding user!";
            }
        } else {
            echo "User already exists!";
        }
    }
    
        2
  •  2
  •   Martin Bean    14 年前

    <?php
    $errors = array();
    $alerts = array();
    
    if (isset($_POST['register'])) {
    
        $pdo = new PDO('[dsn]', '[user]', '[pass]');
    
        // first, check user name has not already been taken
        $sql = "SELECT COUNT(*) AS count FROM user_list WHERE uname = ?";
        $smt = $pdo->prepare($sql);
        $smt->execute(array($_POST['uname']));
        $row = $smt->fetch(PDO::FETCH_ASSOC);
        if (intval($row['count']) > 0) {
            $errors[] = "User name " . htmlspecialchars($_POST['uname']) . " has already been taken.";
        }
    
        // continue if there are no errors
        if (count($errors)==0) {
            $sql = "INSERT INTO user_list ([fields]) VALUES ([values])";
            $res = $pdo->exec($sql);
            if ($res==1) {
                $alerts[] = "Member successfully added.";
            } else {
                $errors[] = "There was an error adding the member.";
            }
        }
    }
    

    上面的示例使用PHP的PDO,因此更改语法以使用您使用的任何数据库抽象。