为什么可以';t我从数组中回显一个变量


Why can't I echo out a variable from an array?

如果有人问我这个问题,我很抱歉,但我不知道该搜索什么才能找到答案。

我刚刚开始学习PHP,正在做一个简单的教程,在那里我"登录"数据库(只是检查电子邮件和密码是否与存储的内容匹配——没有创建实际的会话)。

我有这个代码:

<?php
include("connectToDb.php");
$loginEmail = $_POST['loginEmail'];
$loginPassword = $_POST['loginPassword'];
$query = mysqli_query($dbc, "SELECT * FROM users WHERE email='$loginEmail'");
$numrows = mysqli_num_rows($query);
if($numrows != 0)
{
    while($row = mysqli_fetch_array($query))
    {
        $dbemail = $row['email'];
        $dbpassword = $row['password'];
        $dbfirstname = $row['firstName'];
    }
    if($loginEmail == $dbemail)
    {
        if ($loginPassword == $dbpassword)
        {
            echo "Hi ".$row['firstName'].", you are now logged in.";
        }
        else
        {
            echo "login failed.";
        }
    }
}
mysqli_close($dbc);
?>

但是echo语句中的$row["firstName"]打印为一个空白字符串:"嗨,你现在登录了。"。如果我使用完全相同的代码,但在echo语句中将$row[‘firstName’]替换为$dbfirstname,我会收到一条格式正确的消息"嗨,Jason,你现在已登录。"。

这两个变量应该是相同的。。。为什么一个工作而另一个不工作?

检查控制流程:

你有while循环while($row = mysqli_fetch_array($query))-所以你给$row分配一个新值并测试它。如果它的计算结果为false(即没有更多的行),你就中断了循环。

这意味着在循环之后$row不再具有有效内容。您存储的值(例如$dbfirstname)来自循环的上一次迭代,因此包含有效数据。