Php 会话变量只调用mysql表中的最后一个id

Php 会话变量只调用mysql表中的最后一个id,php,session,Php,Session,目前,我使用SESSIONS从另一个页面调用变量,在另一个页面上使用while()语句从mysql数据库检索多个数据。许多检索到的行具有从表中检索到的特定id。每行还有一个链接,单击该链接时,您将进入第2页,以显示该id所在人员的详细信息。 例如,在第1页,这些是显示的数据 id | name 1 | Kamena 2 | aman 3 | Forfie 第1页上的代码示例 session_start(); $stmt="select id,name from table1"; $re

目前,我使用
SESSIONS
从另一个页面调用变量,在另一个页面上使用
while()
语句从mysql数据库检索多个数据。许多检索到的行具有从表中检索到的特定id。每行还有一个链接,单击该链接时,您将进入第2页,以显示该id所在人员的详细信息。 例如,在第1页,这些是显示的数据

id | name
1  | Kamena
2  | aman
3  | Forfie
第1页上的代码示例

session_start();

$stmt="select id,name from table1";
$result=$db->query($stmt);
while($row=mysqli_fetch_assoc($result)){
$id=$row['id'];
$name=$row['name'];

$_SESSION['id']=$id;
echo "<table>
            <tr>
                <td><a href='page2.php'>id</a></td>
                <td>name</td>
            </tr>
       </table>";
  }

这里的问题是,当链接id为1,名称为Kamena时,点击到第2页,id在第2页返回3,而它假设返回的id等于1。请问我有什么地方做错了吗

是的,您正在写入会话['id'],并且每次都会覆盖它,因此只存储最后一个值。你需要这样做

$_SESSION['id'][$id] = $id;
通过这种方式,您可以访问它,并且可以作为键/值访问它

所以在你的下一页,如果你想访问的id是7,你可以这样访问它

 echo($_SESSION['id']['7']);
但我看到的一个问题是,您不知道单击哪个ID可以访问下一页。在你的链接中,你需要以某种方式引用它,然后检查它是否在会话中。这有点违背了会话变量的意义。因为这样你就可以把它作为GET请求传递了

像这样

  <a href='page2.php?id=7'>PAGE 2</a>

但这是完全不值得推荐的,只是强调了一个事实,即您需要以某种方式将其传递到下一页,而SESSION不是这种方式,因为您需要以某种方式引用该SESSION。如果你知道我想说什么。

我根本不想使用get()函数,我更喜欢使用sessions而不是get。不,我知道……但我想说的是,你必须以某种方式在页面上传递它。将所有id存储在一个会话中是很酷的,但是在下一个页面上,您如何知道需要访问哪个id,而不随后将其传递到该页面以检查会话……正如我所说的那样。有点违背了使用session的初衷,因为您必须以某种方式传递它,在这种情况下,您可以传递id并查询数据库,同时避免session…希望您理解我想说的不是真的,而是您的意思,如果您登录一个用户,然后将其用户id存储在其中,那么使用会话进行此类工作是不可取的。这样,当他们导航时,他们可以查看相关信息。但在本例中,您正在加载多个,必须传递指向ID的链接,以便您可以访问单击的链接。如果你把这些都存储在一个会话中,就像我展示的那样。您仍然无法知道单击了哪个链接以及加载了哪个ID,除非您通过GET或可能通过javascript cookie或类似的方式在链接中传递它
  <a href='page2.php?id=7'>PAGE 2</a>
 if(isset($_GET)){
  $id = $_GET['id'];
 }

 $stmt="select id,name from table1 where id=$id";
 $result=$db->query($stmt);
 $row= mysqli_fetch_assoc($result);