1

我已经将记录的用户名存储在 $_SESSION[user_name] 变量中。如何另外将 user_id 存储在 $_SESSION[user_id] 变量中。我尝试使用 $stmt->fetch_array(MYSQLI_NUM); 但没有运气。

我有一个这样的 MySQL 表:

登录:

+---------------+-------------+-------------+-------------+
|    auto_id    |  username   |  password   |   user_id   |
+---------------+-------------+-------------+-------------+
|       0       |      a      |      b      |      1      |
+---------------+-------------+-------------+-------------+
|       1       |      c      |      d      |      2      |
+---------------+-------------+-------------+-------------+
|       2       |      e      |      f      |      3      |
+---------------+-------------+-------------+-------------+

我的 php 登录验证器是:

<?php
session_start();
require_once('php/config.php');

if(isset($_POST['submit'])){
  $username = $_POST['user_name'];
  $password = $_POST['pwd'];
  $user_id_col = "3";

  $stmt = $con->prepare("SELECT * FROM tapp_login WHERE username = ? AND password = ? LIMIT 1");
  $stmt->bind_param('ss', $username, $password);
  $stmt->execute();
  $stmt->bind_result($username, $password);
  $stmt->store_result();
  if($stmt->num_rows == 1)  //To check if the row exists
  {
    while($stmt->fetch())
    {
  $_SESSION['LOGIN_STATUS']=true;
  $_SESSION['user_name'] = $username;
  $_SESSION['user_id'] = $user_id;
  echo 'true';
    }
  }
  else {
    echo 'false';
  }
  $stmt->close();
}
else{
}
$con->close();
?>
4

2 回答 2

0

该变量$user_id从未在您的代码中定义。我假设您正在使用 PDO 进行查询,这应该可以解决问题

$row = $stmt->fetch(PDO::FETCH_ASSOC);
$_SESSION['LOGIN_STATUS']=true;
$_SESSION['user_name'] = $username;
$_SESSION['user_id'] = $row['user_id'];

由于您只期望一个结果,因此您不需要 while 循环。

如果你想知道神秘的东西,你可以在手册PDO::FETCH_ASSOC中阅读它。

于 2013-11-14T19:00:22.623 回答
0

$stmt->fetch() 返回一个值,但你永远不会将它存储在变量中。

利用

while($data = $stmt->fetch()) { 
    $_SESSION['userid'] = $data['userid'];
}
于 2013-11-14T19:00:40.390 回答