古いデータベース構造から新しいデータベース構造にデータを移行するスクリプトを作成しようとしていますが、現在持っているものが機能するかどうかわかりません。
まず、すべての古いテーブルを格納する配列を作成しました。この例では、テーブルを 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'])."');
");
}
データを挿入しようとするまで、スクリプトは機能します。これを機能させる方法についての提案をお待ちしています。