2013-01-21 75 views
1

我想创建一个使用PHP,PDO和MySQL的表。 为了我的应用程序的需要,表的名称必须是一个变量。PHP MySQL创建表

这里是我的代码:

$request = $pdo->prepare("CREATE TABLE IF NOT EXISTS :table (
     `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
     `parent_id` bigint(20) unsigned NOT NULL, 
     `position` bigint(20) unsigned NOT NULL, 
     `left` bigint(20) unsigned NOT NULL, 
     `right` bigint(20) unsigned NOT NULL, 
     `level` bigint(20) unsigned NOT NULL, 
     `title` text CHARACTER SET utf8 COLLATE utf8_unicode_ci, 
     `type` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, 
     `content` text CHARACTER SET utf8 COLLATE utf8_unicode_ci, 
     PRIMARY KEY (`id`) 
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;"); 
$request->execute(array(
    'table'=>$uuid)); 

我不能用 “:表” 中的MySQL的声明? 目前,我写道:

[...] 
CREATE TABLE IF NOT EXISTS `$uuid` 
[...] 

这工作,但它听起来怪我^^”这是我的问题的唯一办法?

+0

var_dump($ uuid);''的输出是什么? – rekire

+0

您尝试使用以下表格执行该版本会发生什么情况? – DWright

+0

@rekire $ uuid包含我用来生成随机ID的uniqid(“”,true)的结果 – FWoelffel

回答

4

您无法传递表名作为参数。如果你想用变量名创建表,你必须使用动态查询。

+0

我不明白... ^^'每次有人在我的网站上注册时,我只需要创建一张表(一个新用户=一张新表)。动态查询真的是我需要的吗?你会怎么做? – FWoelffel

+5

“一位新用户=一张新桌子”最差的设计。包含引用您的用户表PK的'UserId'字段。 –

+0

Hokobyan我知道这是一个非常糟糕的设计。但是,我没有时间完成这个项目,这似乎是最简单的版本。 我有一个包含我所有用户的表格,每个用户可以在线存储文件并通过“树视图”访问它们。所以每个用户都有一个表格(就像我试图用变量名称创建的表格)一样存储文件。表格的名称对应于用户标识。 – FWoelffel

1
$pdo->query("CREATE TABLE IF NOT EXISTS userfiles (
    `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
    `user_id` int unsigned NOT NULL, 
    `parent_id` bigint(20) unsigned NOT NULL, 
    `position` bigint(20) unsigned NOT NULL, 
    `left` bigint(20) unsigned NOT NULL, 
    `right` bigint(20) unsigned NOT NULL, 
    `level` bigint(20) unsigned NOT NULL, 
    `title` text CHARACTER SET utf8 COLLATE utf8_unicode_ci, 
    `type` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, 
    `content` text CHARACTER SET utf8 COLLATE utf8_unicode_ci, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8"); 

这是处理这种情况的唯一正确方法。
这样的事情是非常基本的事情。
和你目前的设置就像一个方形车轮。
尽管你缺乏时间,你必须把它做成单桌。
否则你会浪费更多的时间,最终会转向正确的设计,但经过无数的痛苦