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