检查是否在 mysql table 中找到用户的正确方法

correct way to check if user is found in mysql table

该函数应 return 找到的用户的 ID,如果未找到则 return false。

目前我正在使用绑定结果和提取来检查是否在 mysql table:

中找到了用户
public function getUserIDByName($UserName) { 
        $uid = "";
        $i=0;
        if($stmt = $this->mysqlserver->prepare("SELECT uid FROM user WHERE name=?")){
            $stmt->bind_param("s", $UserName);
            $stmt->execute();
            $stmt->bind_result($uid);
            while($stmt->fetch()){
                $i++;
            }
            $stmt->close();
        }
        if($i==0){
            return false;
        }else{
            return $uid;
        }       
    } 

这行得通,但我假设有一种正确的方法可以在获取循环中没有计数器的情况下执行此操作。我 无法使用 get_result,因为 mysqlnd 不可用。

改用这个

public function getUserIDByName($UserName)
{
    $uid = '';
    $response = false;
    $stmt = $this->mysqlserver->prepare("SELECT uid FROM user WHERE name=?");
    $stmt->bind_param("s", $UserName);
    $stmt->execute();
    $stmt->bind_result($uid);
    if ($stmt->fetch()) {
        $response = $uid;
    }
    $stmt->close();
    return $response;
}

简单使用num_rows检查您的查询return结果与否

function getUserIDByName($UserName) {
    if ($stmt = $this->mysqlserver->prepare("SELECT uid FROM user WHERE name=?")) {
        $stmt->bind_param("s", $UserName);
        $stmt->execute();
        $row_cnt = $stmt->num_rows;
        if ($row_cnt == 1) {
            $stmt->bind_result($uid);
            while ($stmt->fetch()) {
                return $uid;
            }
        } else {
            return false;
        }
    }
}

编辑:刚刚意识到您使用的是 mysqli 而不是 pdo。如果你想在我猜的功能中使用 PDO,我会把它留在这里。

这就是我要做的。如果您想保证只找到 1 个用户,您可以将 rowcount() > 0 更改为 rowcount() === 1

public function getUserIDByName($UserName)
{
    $stmt = $this->mysqlserver->prepare("SELECT uid FROM user WHERE name = :name");
    // bind :name to the username
    $stmt->bindParam(":name", $UserName); 
    // execute the query
    $stmt->execute(); 
    // check the rowcount
    if ($stmt->rowcount() > 0) { 
        // fetch the results as a associative array
        return $stmt->fetch(PDO::FETCH_ASSOC); 
    }
    // return false because rowcount wasn't bigger than 0
    return false;
}