使用PDO在mysql数据库中创建表

时间:2015-11-03 04:10:17

标签: php mysql database pdo

我正在尝试学习如何在mysql数据库中创建表。我的代码仅用于学习目的。我的认可是

1.用户将注册该网站。

2.每当用户注册时,都会创建一个数据库(我的意思是每个用户的数据库和数据库名称将与用户名完全相似)。无论是好的还是坏的方法都是另一个问题。我不是在寻求任何有关此事的建议。

3.成功创建数据库后,php将调用Table :: make()类,这将创建一个包含一些指定字段的表。(问题在于此处)

数据库已成功创建,但问题是该特定数据库中没有生成表。也没有给出错误消息。这里可能出现什么情况?我怎么解决这个问题。

这个过程需要一些时间才能完成。这可能是造成这种延迟的原因。(我的意思是,当我点击注册按钮时,我可以看到浏览器重新加载3-4秒完成任务)

  class Table{

     public static function make($fields){

        try{
            print_r($fields);
            $pdo=new PDO("mysql:host=localhost;dbname={$fields['username']}",'root','');
            $sql = "CREATE TABLE userinfo (
                   id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
                   username VARCHAR(30) NOT NULL,
                   password VARCHAR(256) NOT NULL,
                   salt VARCHAR(50),
                   name VARCHAR(50),
                   reg_date TIMESTAMP,
                   group INT(11)
                   )";
            $ready=$pdo->prepare($sql);
            $ready->execute();
        }catch(PDOException $e){
            echo 'bal';
            echo $e->getMessage();
        }

     }
  }

1 个答案:

答案 0 :(得分:3)

您的方法,即为每个用户创建数据库不好。 即使为每个用户创建单独的表也将非常复杂。正如您已经提到的那样,它是博客网站,每个用户都会有帖子,评论等。

通常的答案是“每个用户的表”是一个糟糕的设计,简单的解决方案是一个单独的表,其中有一个额外的字段来识别所有权。

e.g。具有

table_1   table_2    table_3 ...... table_999999999
id        id         id             id
...       ...        ...            ...

是一种巨大的资源浪费,而

table
id
user
...

更容易表现。

您的数据看起来像 表User

userid  Name    ....
1       Alex    ....
2       Bob     ....

Post

userid  postid  posttext
1       1       Hello First Post of User 1
1       2       Hello, 2nd Post of User 1
2       3       Hello, First post of User 2

和Select查询也将非常简单。

如果您想从特定用户中选择一个帖子,您可以使用

select * from Post where userid=1. 

这是MySql。即使你在表中有100万条记录也不会有问题。 如果您想进行优化,可以了解如何创建Indexe