-1

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

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

有了这个,我得到这个错误: Undefined variable: user_name in

我知道这是错误的,因为它显然不起作用。但是我也尝试过像这样在 while 循环中的那个地方设置会话。

$_SESSION['user_id'] = $row['username'];

但后来我得到一个空白的结果。这意味着会话没有价值,还是我错了?

4

3 回答 3

0

当没有返回数据时,while甚至不会执行一次。因此,请检查您的查询。

于 2013-06-02T12:18:36.903 回答
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");
于 2013-06-01T17:35:22.857 回答
-1

首先,您从未检查过用户是否确实存在于数据库中,所以我个人要做的是准备查询并将值设置为默认用户名-运行查询,如果没有返回任何行,则什么也不做,如果我们确实有然后一行获取该行中的相应列值(“用户名”)并将变量设置为该值。

$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/>';
于 2013-06-01T17:41:00.713 回答