Php 使用fetch数组PDO设置会话变量,不起作用

Php 使用fetch数组PDO设置会话变量,不起作用,php,arrays,session,pdo,fetch,Php,Arrays,Session,Pdo,Fetch,正如我一直在学习的,编码是关于一些细节的,我遗漏了一些东西,因为我有以下代码: public function login() { if ($_POST) { $logdb = new PDO('mysql:host=localhost;dbname=kiko', 'kiko', 'pass'); $logdb->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $l

正如我一直在学习的,编码是关于一些细节的,我遗漏了一些东西,因为我有以下代码:

public function login() {
    if ($_POST) {
      $logdb = new PDO('mysql:host=localhost;dbname=kiko', 'kiko', 'pass');
      $logdb->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      $stmt = $logdb->prepare("SELECT * FROM usreg WHERE email=:email AND password=:pass");
      $stmt->bindParam(":email", $_POST['email']);
      $stmt->bindParam(":pass", $_POST['password']);
      $stmt->execute();
      $loged = $stmt->fetch();
      $atributes = $stmt->fetch(PDO::FETCH_ASSOC);
      if ($loged) {
         session_start();
         $_SESSION["loggedIn"] = true;
         $_SESSION["id"] = $atributes->id;
         $_SESSION["email"] = $_POST['email'];
         $_SESSION["group"] = $atributes->group;
         $_SESSION["firstname"] = $atributes->firstname;
         $_SESSION["lastname"] = $atributes->lastname;
         $_SESSION["phone"] = $atributes->phone;
         $_SESSION["mobile"] = $atributes->mobile;
         $_SESSION["adress"] = $atributes->adress;
         $_SESSION["city"] = $atributes->city;
         $_SESSION["country"] = $atributes->country;
      } else {
          echo 'wrong login try again';
        }
      } else {
          echo '<form name="login" action="" method="POST">
      Email: <br />
      <input type="text" name="email"/><br />
      Password: <br />
      <input type="password" name="password"/><br />
      <button type="submit">Login</button>
      <a href="register.php">Register</a></form>';
      }
  }
但结果是一样的,我将电子邮件从数组更改为
POST
,它可以工作,因为当我这样做时:

echo $_SESSION['email'];

它可以工作,但提取没有将详细信息传递给其他会话全局对象。我该怎么做才能成功我想做的事你们能帮我吗?我需要另一种事先准备好的声明吗?它是否因为我正在生成
WHERE
子句而缺少结果?

为什么要获取两次?一次为$loged,另一次为$atributes

我假设用户名/密码组合是唯一的,因此您只能从SQL查询中得到一个结果。这意味着当你再次调用fetch时,你将一无所获

也许你想要:

    //$loged = $stmt->fetch();
    $atributes = $stmt->fetch(PDO::FETCH_OBJ);
    if ($atributes) {
        session_start();

        $_SESSION["loggedIn"] = true;
        $_SESSION["id"] = $atributes->id;

另外,请确保在处理密码时使用

使用
FETCH\u OBJ
而不是
FETCH\u ASSOC
,因为填充会话的代码依赖于
->
…我以前尝试过FETCH\u OBJ,但可能是因为它不起作用,所以我做了一些错误的事情,现在我只是删除了所有内容,并按照您所说的那样放置,它起作用了,非常感谢我的朋友;)
    //$loged = $stmt->fetch();
    $atributes = $stmt->fetch(PDO::FETCH_OBJ);
    if ($atributes) {
        session_start();

        $_SESSION["loggedIn"] = true;
        $_SESSION["id"] = $atributes->id;