回显来自数据库PDO的数据

时间:2013-06-01 17:31:41

标签: php pdo

在这种情况下尝试回应用户的用户名。我有一个朋友帮助我,但他似乎无法解决它。所以我问你们。

基本上,我现在正在尝试从登录的人那里获取用户名。登录时设置的会话称为“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'];

然后我得到一个空白的结果。这意味着会话没有价值,或者我错了?

3 个答案:

答案 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/>';