使用会话用户名从 MySQL 获取数据


use session username to get data from mysql

我正在我的网站上为用户制作一个个人资料页面,该人可以在其中更改他/她的信息。我应该可以更改,姓名,姓氏,用户名,代码等。但我从用户名开始。

当一个人登录时,我将用户名存储在会话中:

索引.php

<?php
    if( !isset( $_SESSION['username'])) include('resources/auth/login.php');
            else exit( header('Location: home.php') );
                if( !isset( $_SESSION ) ) session_start();
    // Logout Session
    if( isset( $_GET['todo'] ) && $_GET['todo'] == 'logout'){
        session_unset();
        session_destroy();
        //echo 'You have been logged out!';
    }
?>

我已经做了一个测试

简介.php:

<?php
   if( !isset( $_SESSION ) ) session_start();
?>
   <?php //echo $_SESSION['username'];?> 

这调用了我的用户名

但是,如果我想从属于该用户名的 mysql 数据库中调用名字,我应该为此使用 session[username]吗?我开始为它进行SQL查询:

<?php
    $stmt = $mysqli->prepare("SELECT firstname FROM login");
    $stmt->execute();
    $fname = null;
      $stmt->bind_result($fname);
        while($stmt->fetch()) {
          echo $fname;
        }
    $stmt->close();
    $mysqli->close();
  ?>

这有效,但调用数据库中的所有名字。所以我尝试将u_id设置为存储的会话变量,即 db = 中的 PK:

$stmt = $mysqli->prepare("SELECT firstname FROM login WHERE u_id=$username");

$stmt = $mysqli->prepare("SELECT firstname FROM loginWHERE u_id = '.$_SESSION[username]'";

但是在这里我得到一个错误:未定义的变量:配置文件中的用户名.php

有人能明白为什么会这样吗?

如果我很了解你,我认为这个查询:

$stmt = $mysqli->prepare("SELECT firstname FROM login WHERE u_id=$username");

应该是这样的:

$stmt = $mysqli->prepare("SELECT firstname FROM login WHERE username ='.$_SESSION[username].'");
//forgive my syntax issues

如果要检索记录的用户的名字,则 where 子句的参数应该是用户的用户名,因为这是标识用户的唯一唯一方法,但是我建议您在会话中也设置用户的 ID,以便 where 参数现在采用用户的唯一 ID。这是确保您检索该特定用户的信息的更好方法,因为两个用户可能具有相同的用户名,因此当您的 where 子句将其作为参数时,它会从数据库中检索两行,这肯定会引起问题。

您没有启动会话的可能性很高。我只知道写 $_SESSION['用户名'] 而不是 u_id = ' 。$_SESSION[用户名]'