MySQL:创建更多数据库或使用ID会更好吗?

时间:2014-10-23 17:09:50

标签: mysql database

我正在开发基于网络的RPG游戏,我希望能够运行不同的“服务器”,但我不确定最好的方法是什么。

第一个想法:创建一个名为“world”的表,当创建一个角色时,他们可以选择一个要加入的世界,通过获取一个将用于告知的world_id他们所处的世界。

第二个想法:从模板创建一个全新的数据库,然后使用带有ID的会话和一个用于连接到正确数据库的交换表。

请记住,我希望人们能够在自己的服务器上创建新的任务,项目,怪物等,而不会影响其他人。我知道可以用第一个想法完成,但我不确定这是否是最好的方法,因为我总是需要检查world_id是否有任何变化。我也有点担心使用会话来更改数据库,但由于它会处于切换状态,我认为没有人可以使用它来进行MySQL注入。

P.S:我希望用户帐户适用于所有数据库,因此他们无需创建新帐户即可在其他数据库上发布,也无需在论坛中发帖。

编辑:我不是说运行几个MySQL服务器,我的意思是使用这样的东西

function openConnection($db = 0){
    switch($db){
        case 1: $db_name = "database_two"; break;
        case 2: $db_name = "database_three"; break;
        case 3: $db_name = "database_four"; break;
        case 4: $db_name = "database_five"; break;
        default: $db_name = "database_one";
    }

    try{
        $conn = new PDO("mysql:host=127.0.0.1;dbname={$db_name};","<user>","<password>");
        $conn -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $conn -> exec("SET NAMES utf8");
        $conn -> exec("USE {$db_name};");
        return $conn;
    }catch(PDOException $e){
        echo "<b>ERROR:</b> ".$e->getMessage(); exit;
    }
}

将所有游戏数据保存在不同的数据库中。

1 个答案:

答案 0 :(得分:0)

Yemto,我也在开发基于网络的RPG。

尝试更改查看数据库的方式。数据库是一种存储和组织数据点的方法,如果用户请求它们,您可以访问这些数据点......

因此,我并没有真正意识到&#34;切换&#34;所有并发症的必要性。表等等,只要您可以将所需的所有世界数据存储在一个数据库中,然后将其传递给用户。

如果您需要收集符合特定条件的多个表数据,并匹配传入的user_id SESSION,您可以在同一个数据库中连接表,例如:

$qry = 
    'SELECT us.*, w.*, q.* 
    FROM user_stats us
    INNER JOIN worlds w ON (w.world_id = us.world_id)
    INNER JOIN quests q ON (q.quest_id = us.current_questnum)
    WHERE us.user_id_fk = "' . $_SESSION['userid'] . '"';

然后,使用这些匹配和返回的数据(例如,对于那个$ _SESSION用户ID,返回世界2),您可以生成新的&#34; world&#34;前端的实体/环境(使用您的引擎...可以实例化一个新类,初始化tilemap和其中的其他对象)并将其传递给用户。