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

これは、そのような状況を処理する唯一の適切な方法です。
そのようなことは非常に基本的なことです。
現在のセットアップは、四角い車輪の車のようなものです。
時間が足りないにもかかわらず、テーブルを 1 つにしなければなりません。
そうしないと、さらに多くの時間を無駄にし、最終的には適切な設計に戻ることになりますが、数え切れないほどの苦労の末です

于 2013-01-21T18:14:08.023 に答える