否则在选择 $row 时不起作用

Else does not work in selection of $row

我想检查用户是否设置了性别。如果没有,它将显示第一个回波。如果是,它将显示他的性别的回声。 问题是页面只显示第一个回声,即使数据库中设置了性别......我真的不知道为什么它不起作用...... 我的代码:

    <?php 


    $username = $_SESSION['username'];

    $sql = "
         SELECT gender FROM members WHERE username = ?";
         $stmt->bind_param('s', $username);

            $stmt->execute();
            $stmt->bind_result($username);
    while ($stmt->fetch()){
                                    if($row['gender'] == ""){
                                            echo "You have not selected your gender yet."; // This is the 1st echo and this is the only one that is displayed
                                    } else {
                                            echo "You selected that you are {$row['gender']}."; // This is not displayed no matter what...
                                    }
    }
    ?>

我哪里错了?

我不是 php 专家,但我认为此代码更适合您,因为我认为 $row 不包含任何内容(我看不到它在任何地方设置的位置,根据文档,bind_result 无论如何都不会那样工作):

$username = $_SESSION['username'];

$stmt = $mysqli->prepare("SELECT gender FROM members WHERE username =  ?");
$stmt->bind_param('s', $username);
$stmt->execute();
$stmt->bind_result($gender);

while ($stmt->fetch()){
    if(empty($gender)){
            echo "You have not selected your gender yet.";
        } else {
            echo "You selected that you are " . $gender;
        }
    }

编辑

使用 empty() 而不是 = "" 以防 $gender 返回空值。

编辑 2

我注意到你从不使用 $sql。我更新了正确语法的代码,假设您的数据库连接称为 $mysqli.

可能需要查看此处的文档:https://php.net/manual/en/mysqli-stmt.bind-result.php