0

我是 PHP 新手并使用序列化数据,

我有一个数据库,它有 2 个表,用户和字符。characterId 与 userId 有关系。

一个用户有 2 个字符,所以我想使用以下代码获取数据:

public static function getCharacter() {
        $mysqli = Controller_Core_Config::getDB();
        if ($mysqli != null) {
            $user = unserialize($_SESSION['user']);
            $sql = "SELECT * FROM `character` WHERE `userId`='" . $user->getId() . "'";
            $result = $mysqli -> query($sql);

            if ($result !== FALSE && $result -> num_rows > 0) {
                $row = $result -> fetch_assoc();
                $_SESSION["character"] = serialize(new Model_Game_User(
                    $row['characterId'], 
                    $row['characterName'], 
                    $row['userId'], 
                    $row['level']
                    ));
            } else {
                echo "You have no characters.";
            }
        }
    }

如果我想显示数据,我使用以下代码:

//some code
$character = unserialize($_SESSION["character"]);
$output .= $character->getCharacterName() . "<br>";
//some code

我的问题是,当我 var_dump ($_SESSION["character"]) 时,我只得到 1 个字符:

string(202) "O:15:"Model_Game_User":4:{s:28:"Model_Game_UsercharacterId";s:1:"3";s:30:"Model_Game_UsercharacterName";s:9:"adminious";s: 23:"Model_Game_UseruserId";s:1:"2";s:22:"Model_Game_Userlevel";s:1:"3";}"

我的问题是,序列化数据中是否可以有多个“字符”?

4

1 回答 1

0

你没有循环你的结果。您只是将找到的第一个结果添加到会话中

你需要这样的东西来替换你的if块:

if ($result !== FALSE && $result -> num_rows > 0) {
    $_SESSION["character"][] = array();
    while($row = $result -> fetch_assoc()) {
        $_SESSION["character"][] = serialize(new Model_Game_User(
            $row['characterId'], 
            $row['characterName'], 
            $row['userId'], 
            $row['level']
            ));
    }
}
于 2013-05-21T12:15:03.007 回答