2011-06-21 122 views
0

我会解释我的问题 从的index.php我后我的登录名和我的login.php存储会话的详细信息(如姓名),例如:如何克隆mysql_result

$_SESSION['name'] = mysql_result($res,0,"name"); 

然后我转发回到index.php。 在这里,我想显示登录用户名:

echo $_SESSION['name'] 

,并从数据库中的所有名称:

$result=mysql_query($query); 
for ($i=0; $i<mysql_num_rows($result); $i++) { 
    $row = mysql_fetch_assoc($result); 
    $name =$row['name']; 
    echo $name; 
} 

在这里,问题来了:我登录时,一切(包括用户的后名称和所有名称)显示正确。但是,当我刷新echo $_SESSION['name']页面显示在DATABSE姓氏== $name,而不是那

所以我想我需要克隆mysql_result($res,0,"name");存储到$ _SESSION当一个[“名”]

谢谢你非常多

编辑 我在session中存储的唯一东西就是登录名。当这个人登录时,他可以看到数据库中的所有人。

+0

什么是您正在运行的实际查询以返回结果? –

+0

是的,你只是传递一个引用而不是一个对象。 – MoarCodePlz

+0

@MoarCodePlz我怎么能“克隆”它呢?而不是传递一个参考 – myro

回答

1

如果您正在寻找克隆对象,那么你可以尝试以下

$object2 = clone $object1; 

从PHP文件似乎有些对象不支持克隆,因此,如果是这样的话,那么你可以试试以下(再次,从PHP文件中评论)做了深刻的副本

protected function deepCopy($inputObject) { 
    return unserialize(serialize($inputObject)); 
} 

有在文档页面的评论做了一些别的好点,这可以在这里找到http://php.net/manual/en/language.oop5.cloning.php

致以问候

+0

太糟糕了我不使用php5。任何其他建议为我的简单情况? – myro

+0

看到mysql_result返回一个字符串,我猜测你实际上是在随后的调用中重写它。你为什么不在那里放置一些逻辑来处理这种情况,以避免重写。我没有意识到mysql_result只是返回一个字符串。这应该通过值而不是通过引用传递。 – MoarCodePlz

+0

我在存入会话时调用一次。然后关闭连接。然后我转发到index.php,然后我再次打开连接,并从数据库中选择所有名称 – myro

0

我认为你最好不要在会话中存储所有其他名称。作为一个登录数据库应用程序,我假设其他人可以使用和更新数据,这意味着无论什么时候他们改变了什么,会话保存的数据在刷新时都会过时。

试着让他们登录并设置他们的凭据,然后当他们回到索引时检查他们是否已登录并获取当时的名称。这样,您就不必担心克隆获取信息,并获得最新的信息。

+1

这不是他在找什么。 – genesis