db_init.php 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. /**
  3. * BCJD 导航 - 数据库初始化脚本
  4. *
  5. * 使用 OOP 类库重构。
  6. * 访问此文件一次即可自动建库建表并导入现有数据。
  7. * ⚠️ 执行完毕后建议删除或限制访问此文件!
  8. */
  9. require_once __DIR__ . '/init.php';
  10. use BCJD\Database;
  11. header('Content-Type: text/html; charset=utf-8');
  12. try {
  13. // 1. 先创建数据库
  14. $pdo = Database::rawConnection();
  15. $pdo->exec(sprintf(
  16. 'CREATE DATABASE IF NOT EXISTS `%s` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci',
  17. DB_NAME
  18. ));
  19. $pdo->exec(sprintf('USE `%s`', DB_NAME));
  20. echo "✅ 数据库创建/确认成功<br>\n";
  21. // 2. 创建 links 表
  22. $pdo->exec("
  23. CREATE TABLE IF NOT EXISTS `links` (
  24. `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  25. `title` VARCHAR(100) NOT NULL COMMENT '链接标题',
  26. `url` VARCHAR(500) NOT NULL COMMENT '链接地址',
  27. `description` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '描述',
  28. `icon_svg` TEXT NOT NULL COMMENT 'SVG 图标代码',
  29. `group_name` VARCHAR(50) NOT NULL DEFAULT 'default' COMMENT '分组名称',
  30. `group_label` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '分组显示标签',
  31. `group_hint` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '分组提示文字',
  32. `keywords` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '搜索关键词',
  33. `tag_label` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '标签文字',
  34. `tag_class` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '标签样式类',
  35. `meta_domain` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '域名/元信息',
  36. `sort_order` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '排序',
  37. `is_private` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1=需登录,0=公开',
  38. `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  39. INDEX `idx_group` (`group_name`),
  40. INDEX `idx_private` (`is_private`),
  41. INDEX `idx_sort` (`sort_order`)
  42. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  43. ");
  44. echo "✅ links 表创建/确认成功<br>\n";
  45. // 3. 导入初始数据(如果表为空)
  46. $count = $pdo->query("SELECT COUNT(*) FROM links")->fetchColumn();
  47. if ($count > 0) {
  48. echo "⚠️ links 表已有 {$count} 条记录,跳过数据导入<br>\n";
  49. } else {
  50. require_once __DIR__ . '/db_seed.php';
  51. $links = get_seed_links();
  52. $stmt = $pdo->prepare("
  53. 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`)
  54. VALUES (:title, :url, :description, :icon_svg, :group_name, :group_label, :group_hint, :keywords, :tag_label, :tag_class, :meta_domain, :sort_order, :is_private)
  55. ");
  56. foreach ($links as $link) {
  57. $stmt->execute($link);
  58. }
  59. echo '✅ 已导入 ' . count($links) . ' 条链接数据<br>';
  60. }
  61. echo '<hr><p style="color:green;font-weight:bold">🎉 数据库初始化完成!</p>';
  62. echo '<p>👉 <a href="public/index.php">访问首页</a> | 👉 <a href="public/admin.php">管理面板</a></p>';
  63. echo '<p style="color:red;font-weight:bold">⚠️ 出于安全考虑,建议你现在删除或重命名本文件(db_init.php)!</p>';
  64. } catch (\PDOException $e) {
  65. echo '<p style="color:red">❌ 数据库错误:' . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8') . '</p>';
  66. }