PHP print_r($ _ SESSION)没有输出我所期望的

时间:2017-06-22 02:58:23

标签: php arrays session

我有第一个名为session1.php的PHP页面,代码如下:



<?php
session_start();

.....mysql connection...

$sql = "SELECT name1, brand, price  FROM products WHERE name1='cuvette' ORDER BY 'name1' ASC,'desc1' ASC";
$result = mysqli_query($con,$sql);

while($row = mysqli_fetch_array($result)) {
$_SESSION['tag'] = $row;
print_r($_SESSION['tag']);
}
&#13;
&#13;
&#13;

输出:

Array ( [0] => Cuvette [name1] => Cuvette [1] => HmbG [brand] => HmbG [2] => 9.00 [price] => 9.00 ) 
Array ( [0] => Cuvette [name1] => Cuvette [1] => HmbG [brand] => HmbG [2] => 8.00 [price] => 8.00 )

然后我设置第二个名为session2.php的PHP页面,代码如下:

&#13;
&#13;
<?php
session_start();
print_r($_SESSION['tag']);
?>
&#13;
&#13;
&#13;

但是session2.php只有输出:

Array ( [0] => Cuvette [name1] => Cuvette [1] => HmbG [brand] => HmbG [2] => 8.00 [price] => 8.00 ) 

我期待结果应与session1.php(2个数组)相同。有人对此有解释吗?

3 个答案:

答案 0 :(得分:1)

您的第一页 循环 循环分配到<{1}}:

$_SESSION['tag']

因为您分配而不是推送到数组,所以每次进行分配时,您都会覆盖会话变量中存储的任何现有内容。

要解决此问题,您可以直接将数组分配给while($row = mysqli_fetch_array($result)) { $_SESSION['tag'] = $row; } 变量,例如:

$_SESSION

输出显示在第一页中是正确的,因为打印语句在 的while循环中。变量被写入,打印出来,然后被覆盖,然后再打印出来。

希望这有帮助! :)

答案 1 :(得分:1)

在第一个php文件中调用while循环中的print_r(),该文件可能会多次执行,会话值已被重写。

将您的代码更改为此,即可。

public override async Task Invoke(IOwinContext context)
{
    if (!context.Request.Path.ToString().StartsWith("/api/"))
    {
        await Next.Invoke(context);

        return;
    }

    // stuff I want to run if the above doesn't match
    await Next.Invoke(context);

    ...
}

答案 2 :(得分:0)

$_SESSION['tag']不是数组而是变量。您看到两个数组,因为您运行print_r两次。

您可以比较以下两个代码:

while($row = mysqli_fetch_array($result)) {
    $_SESSION['tag'] = $row;   //This is the assignment of variable
}
print_r($_SESSION['tag']);

另一个是:

while($row = mysqli_fetch_array($result)) {
    $_SESSION['tag'][] = $row;  //This is appending the variable to the array
}
print_r($_SESSION['tag']);