在这种情况下尝试回应用户的用户名。我有一个朋友帮助我,但他似乎无法解决它。所以我问你们。
基本上,我现在正在尝试从登录的人那里获取用户名。登录时设置的会话称为“user_id”。没关系,这是我的代码`
$user = $dbh->prepare("SELECT `username` FROM `users` WHERE `user_id` = ':user_id'");
$user->bindParam(':user_id', $_SESSION['user_id'], PDO::PARAM_STR);
$user->execute();
while($row = $user->fetch(PDO::FETCH_NUM)){
$user_name = $row['1'];
}
?>
<h3>Welcome <p class="blue"><?php echo $user_name;?></p></h3><br/>`
有了这个,我收到了这个错误: 未定义的变量:
中的user_name我知道这是错的,因为它显然不起作用。但我也尝试在while循环中设置会话,就像这样。
$_SESSION['user_id'] = $row['username'];
然后我得到一个空白的结果。这意味着会话没有价值,或者我错了?
答案 0 :(得分:0)
$row
变量
while($row = $user->fetch(PDO::FETCH_NUM)){
$user_name = $row[0];
}
在原始代码中,$row['1']
。您没有名为1
的字段,因此请从中删除单引号。
此外,行(在数字索引时)从0开始,因此用户名字段为$row[0]
修改强>
要了解@jeroen提到的内容,在SQL查询中,您不应该在参数化值周围加上引号:
$user = $dbh->prepare("SELECT `username` FROM `users` WHERE `user_id` = :user_id");
答案 1 :(得分:0)
如果没有返回数据,while
将不会执行一次。
因此,请检查您的查询。
答案 2 :(得分:-1)
首先,你从未检查用户是否确实存在于数据库中,所以我个人会做的是准备查询并将值设置为默认用户名 - 运行查询,如果没有返回任何行,则不执行任何操作,如果我们实际上有一行然后获取该行中的相应列值('username')并将变量设置为该值。
$user = $dbh->prepare("SELECT `username` FROM `users` WHERE `user_id` = ':user_id'");
$user->bindParam(':user_id', $_SESSION['user_id'], PDO::PARAM_STR);
$user->execute();
$UserName = "Unknown!";
while( $row = $user->fetch(PDO::FETCH_NUM) ){
$UserName = $row['username'];
}
echo '<h3>Welcome <p class="blue">{$UserName}</p></h3><br/>';