我正在尝试学习如何在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();
}
}
}
答案 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
。