我有第一个名为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;
输出:
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页面,代码如下:
<?php
session_start();
print_r($_SESSION['tag']);
?>
&#13;
但是session2.php只有输出:
Array ( [0] => Cuvette [name1] => Cuvette [1] => HmbG [brand] => HmbG [2] => 8.00 [price] => 8.00 )
我期待结果应与session1.php(2个数组)相同。有人对此有解释吗?
答案 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']);