如何在 php 中获取选定的数据库值作为会话变量?

How to get a selected database value as a session variable in php?

我想获取 users table 中的 id 作为名为 $_SESSION['id'] 的 PHP 会话变量。但是当我打印会话变量时,我得到了 Undefined index 作为输出。

这是我的 PHP 代码。

$jsqla = mysql_query("select id, user_name, user_type from users where pw='$pass' and email='$email'") or die("Website under maintenance.");
$jfeta = mysql_fetch_assoc($jsqla);

$id = $jfeta['id'];
$_SESSION['id'] = $id;

您是否使用 session_start 启动会话?

<?php
session_start();
?>

之后

$id = $jfeta['id'];

应该有效:

<?php
    $jsqla = mysql_query("select id, user_name, user_type from users where pw='".$pass."' and email='".$email."'") or die("Website under maintenance.");
    $jfeta = mysql_fetch_assoc($jsqla);

    session_start();
    $id = $jfeta['id'];
    $_SESSION['id'] = $id;
?>

您的选择也可能是问题所在:

$jsqla = mysql_query("select id, user_name, user_type from users where pw='$pass' and email='$email'") or die("Website under maintenance.");

可以用这个更好地工作:

$jsqla = mysql_query("select id, user_name, user_type from users where pw='".$pass."' and email='".$email."'") or die("Website under maintenance.");

消息"Undefined index"表示您使用的一个值未设置。 您可以通过示例来防止这种情况:

if(isset($jfeta['id']))
{
    //do thing
}

mysql 已弃用。请改用 mysqli 或 PDO。

尽管如此...请更新您的查询。

为了更好地了解和调试,首先将您的 sql 查询存储在一个变量中:

$sql = "select id, user_name, user_type from users where pw='".$pass."' and email='".$email."'";

现在使用此代码:

(http://php.net/manual/en/function.mysql-fetch-assoc.php)

$result = mysql_query($sql);


if (!$result) {
    echo "Could not successfully run query ($sql) from DB: " . mysql_error();
    exit;
}

if (mysql_num_rows($result) == 0) {
    echo "No rows found, nothing to print so am exiting";
    exit;
}

$row = mysql_fetch_assoc($result);

$id = $row["id"];

$_SESSION['id'] = $id;

但再次...使用 mysqli 或 PDO - mysql 已弃用!

Warning

This extension is deprecated as of PHP 5.5.0, and will be removed in the future.

首先使用以下代码检查是否设置了会话变量。

if(isset($_SESSION['id'])) {
  echo $_SESSION['id'];
} else { 
  echo "error."; 
}