1

我正在尝试使用 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`
[...]

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

4

2 回答 2

4

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

于 2013-01-21T17:34:14.080 回答
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");

这是处理此类情况的唯一正确方法。
这样的事情是非常基本的事情。
而您当前的设置就像一辆带有方形轮子的汽车。
尽管您的时间不足,但您必须将其设为单桌。
否则,您将浪费更多时间,最终无论如何都会转向正确的设计,但经过无数次的痛苦

于 2013-01-21T18:14:08.023 回答