如果有人问我这个问题,我很抱歉,但我不知道该搜索什么才能找到答案。
我刚刚开始学习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
)来自循环的上一次迭代,因此包含有效数据。