-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/>`

これで、次のエラーが発生します: 未定義の変数: 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

最初に、ユーザーが実際にデータベースに存在するかどうかを確認したことがないので、私が個人的に行うことは、クエリを準備し、値をデフォルトのユーザー名に設定することです。クエリを実行し、行が返されない場合は何もしません。行は、その行 ('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/>';
于 2013-06-01T17:41:00.713 に答える