setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 如果是新数据库,初始化表结构 if ($is_new_db) { // 创建 apps 表 $db->exec(" CREATE TABLE IF NOT EXISTS apps ( id INTEGER PRIMARY KEY AUTOINCREMENT, filename TEXT NOT NULL, original_name TEXT NOT NULL, version TEXT, description TEXT, upload_time DATETIME DEFAULT CURRENT_TIMESTAMP, file_size INTEGER ) "); // 创建 config 表 $db->exec(" CREATE TABLE IF NOT EXISTS config ( key TEXT PRIMARY KEY, value TEXT ) "); // 创建 users 表 $db->exec(" CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE NOT NULL, password TEXT NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ) "); // 插入默认配置 $defaults = [ ['site_title', 'OPS 运营管理系统'], ['site_description', '点击下方按钮下载移动端 APP'], ['logo_path', 'logo.png'] ]; $stmt = $db->prepare("INSERT INTO config (key, value) VALUES (?, ?)"); foreach ($defaults as $config) { $stmt->execute($config); } // 插入默认管理员账号(密码使用 password_hash 加密) $stmt = $db->prepare("INSERT INTO users (username, password) VALUES (?, ?)"); $stmt->execute(['admin', password_hash('admin', PASSWORD_DEFAULT)]); // 设置新创建的数据库文件权限 @chmod($db_path, 0666); } // 数据库升级:如果 users 表不存在,创建它并迁移默认用户 $tables = $db->query("SELECT name FROM sqlite_master WHERE type='table' AND name='users'")->fetchAll(); if (empty($tables)) { $db->exec(" CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE NOT NULL, password TEXT NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ) "); // 插入默认管理员账号 $stmt = $db->prepare("INSERT OR IGNORE INTO users (username, password) VALUES (?, ?)"); $stmt->execute(['admin', password_hash('admin', PASSWORD_DEFAULT)]); } } catch (PDOException $e) { die("数据库连接失败: " . $e->getMessage() . "

请确保:
1. data 目录存在且可写 (chmod 777 data)
2. Web 服务器用户有权限创建文件"); }