1

古いデータベース構造から新しいデータベース構造にデータを移行するスクリプトを作成しようとしていますが、現在持っているものが機能するかどうかわかりません。

まず、すべての古いテーブルを格納する配列を作成しました。この例では、テーブルを 1 つだけリストします。

$old_tabes = array(
    "pages" => "sf_content_pages"
);

次に、古いテーブルを削除して新しいテーブルを作成しながら、各テーブルをループしてすべてのデータを収集しました。

foreach($old_tables as $key => $old_table){

    $query = $db->query("SELECT * FROM `{$old_table}`");

    switch($key){
        case "pages":
            while($page = $query->fetch_assoc()){
                $pages[] = $page;
            }

            $db->query("DROP TABLE `{$old_table}`");

            $db->multi_query("
                CREATE TABLE `sf_content_page` (
                  `id` int(6) NOT NULL AUTO_INCREMENT,
                  `parent_id` int(6) NOT NULL DEFAULT '0',
                  `common_id` int(6) NOT NULL DEFAULT '0',
                  `position` int(6) NOT NULL DEFAULT '0',
                  `published` int(1) NOT NULL DEFAULT '1',
                  `page_type` varchar(10) NOT NULL DEFAULT 'default',
                  `tags` tinytext NOT NULL,
                  `url` tinytext NOT NULL,
                  `meta_title` text NOT NULL,
                  `meta_description` text NOT NULL,
                  `meta_keywords` text NOT NULL,
                  `display_type` tinytext NOT NULL,
                  `created_by` int(6) NOT NULL,
                  `created` datetime NOT NULL,
                  `modified_by` int(6) NOT NULL,
                  `modified` datetime NOT NULL,
                  PRIMARY KEY (`id`),
                  KEY `Parent_ID` (`parent_id`),
                  KEY `Common_ID` (`common_id`)
                ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

                CREATE TABLE IF NOT EXISTS `sf_content_page_language` (
                  `id` int(6) NOT NULL AUTO_INCREMENT,
                  `page_id` int(6) NOT NULL,
                  `language_id` int(6) NOT NULL DEFAULT '1',
                  `title` tinytext NOT NULL,
                  `body` text NOT NULL,
                  PRIMARY KEY (`id`),
                  KEY `Parent_ID` (`page_id`),
                  KEY `Common_ID` (`language_id`)
                ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;           
            ");
        break;
    }
}

最後に行ったのは、すべてのデータを含む配列をループ処理し、そのデータを新しいテーブルに挿入することでした。

foreach($pages as $page){
    $db->multi_query("
        INSERT INTO `sf_content_page` (`id`,`parent_id`,`common_id`,`position`,`published`,`page_type`,`tags`,`url`,`meta_title`,`meta_description`,`meta_keywords`,`display_type`,`created_by`,`created`,`modified_by`,`modified`) VALUES('{$page['id']}','{$page['parent_id']}','{$page['common_id']}','{$page['position']}','{$page['published']}','{$page['page_type']}','{$page['tags']}','{$page['url']}','{$page['meta_title']}','{$page['meta_description']}','{$page['meta_keywords']}','{$page['display_type']}','{$page['created_by']}','{$page['created']}','{$page['modified_by']}','{$page['modified']}');

        INSERT INTO `sf_content_page_language` (`page_id`,`language_id`,`title`,`body`) VALUES('{$page['id']}','1','{$page['title']}','".$db->real_escape_string($page['body'])."');
    ");
}

データを挿入しようとするまで、スクリプトは機能します。これを機能させる方法についての提案をお待ちしています。

4

0 に答える 0