将mysql结果存储在SESSION数组中供以后使用(通过in_array检查)


store mysql results in SESSION array for later use (to check via in_array)

我现在有这个:require_once("auth.php");

auth.php:
    session_start();
    if(!isset($_SESSION['SESS_MERCHANT_ID']) || (trim($_SESSION['SESS_MERCHANT_ID']) == '')) {
        header("location: login-form.php");
        exit();
    }
mybadges.php:
        $mybadges = mysql_query("SELECT badge_id
        FROM badges WHERE merchant_id = $current_userid ORDER BY badge_id DESC"); 
    while ($result = mysql_fetch_array($mybadges)){
    $badge_id = $result['badge_id'];
    }

我想知道如何将$result['badge_id'];存储在$_SESSION数组中(如$_SESSION['badges'] ?)

一个更合理的'auth.php'版本

session_start();
if(empty($_SESSION['SESS_MERCHANT_ID'])) {
    header("location: login-form.php");
    exit();
}

mybadge .php的更合理的版本:

$sql = "SELECT badge_id FROM badges WHERE merchant_id = $current_userid ORDER BY badge_id DESC"
$res = mysql_query($sql) or trigger_error(mysql_error()." ".$sql); 

如果只有一个bagde_id要存储:

$row = mysql_fetch_array($res);
$_SESSION['badge'] = $row['badge_id'];

以防有很多id(因为从代码中无法确定需要什么):

$badges = array();
while ($row = mysql_fetch_array($res)) {
    $badge_ids[] = $row['badge_id'];
}
$_SESSION['badges'] = $badge_ids;

一般来说,要在会话中存储任何内容,只需将该内容赋值给会话变量:

$_SESSION['badges'] = $badge_ids;

没什么大不了的。

一个SESSION数组变成了你写的那样。$_SESSION['badges']是要使用的常规变量。

注意,你只能保存标量、数组和对象。没有资源。

如果我很了解你的需求,你可以简单地这样做:

$_SESSION['badges'] = $result['badge_id'];

确保mybadge .php包含auth.php,否则您将无法启动会话。我假设这就是你所拥有的,但它并没有在上面的代码中显示出来。假设您包含auth.php,只需按照sputnick所说的使用

$_SESSION['badges'] = $result['badge_id'];

php session支持多维数组。

$members=array();
foreach(mysql_fetch_array($memberresultset) as $key->$value)
$members[]=$value;
foreach($members as $mv)
$_SESSION["MEMBER"][]=$mv;
例如,

可以。

也可以这样写:

$_SESSION["badgeidnumbers"][]=$result["badgeid"]

但是您需要使用foreach命令添加它们,获取不止一行。

额外的括号用于使用新的索引号添加到数组中。你可以在第二个括号里写任何东西

也可以使用一些格式,比如

$_SESSION["badgeidnumbers"][$result["badgeid"]]=$result["badgename"]

我不建议把项目分成太多的文件。通常,您不需要会话变量。不要犹豫,询问有关应用程序总体结构的想法。这可以为你节省很多时间。