PHP MySQL CREATE TABLE

时间:2013-01-21 17:27:51

标签: php mysql pdo create-table

我正在尝试使用PHP,PDO和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语句中使用“:table”吗? 目前我写道:

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

这有效但对我来说听起来很奇怪^^'它是解决我问题的唯一方法吗?

2 个答案:

答案 0 :(得分:4)

您无法将表名作为参数传递。如果要创建具有变量名称的表,则必须使用动态查询。

答案 1 :(得分:2)

$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");

这是处理此类情况的唯一正确方法 这些事情是非常基本的事情 你现在的装置就像一辆带方轮的汽车 尽管你的时间不够,但你必须把它变成单人桌 否则你将浪费更多的时间,最终将转向正确的设计,但无数之后痛苦

相关问题