成exec(sprintf(
'CREATE DATABASE IF NOT EXISTS `%s` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci',
DB_NAME
));
$pdo->exec(sprintf('USE `%s`', DB_NAME));
echo "✅ 数据库创建/确认成功
\n";
// 2. 创建 links 表
$pdo->exec("
CREATE TABLE IF NOT EXISTS `links` (
`id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`title` VARCHAR(100) NOT NULL COMMENT '链接标题',
`url` VARCHAR(500) NOT NULL COMMENT '链接地址',
`description` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '描述',
`icon_svg` TEXT NOT NULL COMMENT 'SVG 图标代码',
`group_name` VARCHAR(50) NOT NULL DEFAULT 'default' COMMENT '分组名称',
`group_label` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '分组显示标签',
`group_hint` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '分组提示文字',
`keywords` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '搜索关键词',
`tag_label` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '标签文字',
`tag_class` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '标签样式类',
`meta_domain` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '域名/元信息',
`sort_order` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '排序',
`is_private` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1=需登录,0=公开',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
INDEX `idx_group` (`group_name`),
INDEX `idx_private` (`is_private`),
INDEX `idx_sort` (`sort_order`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
");
echo "✅ links 表创建/确认成功
\n";
// 3. 导入初始数据(如果表为空)
$count = $pdo->query("SELECT COUNT(*) FROM links")->fetchColumn();
if ($count > 0) {
echo "⚠️ links 表已有 {$count} 条记录,跳过数据导入
\n";
} else {
require_once __DIR__ . '/db_seed.php';
$links = get_seed_links();
$stmt = $pdo->prepare("
INSERT INTO `links` (`title`, `url`, `description`, `icon_svg`, `group_name`, `group_label`, `group_hint`, `keywords`, `tag_label`, `tag_class`, `meta_domain`, `sort_order`, `is_private`)
VALUES (:title, :url, :description, :icon_svg, :group_name, :group_label, :group_hint, :keywords, :tag_label, :tag_class, :meta_domain, :sort_order, :is_private)
");
foreach ($links as $link) {
$stmt->execute($link);
}
echo '✅ 已导入 ' . count($links) . ' 条链接数据
';
}
echo '
🎉 数据库初始化完成!
'; echo ''; echo '⚠️ 出于安全考虑,建议你现在删除或重命名本文件(db_init.php)!
'; } catch (\PDOException $e) { echo '❌ 数据库错误:' . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8') . '
'; }