修复数据库表不存在的错误
时间：2025年1月12日

问题描述：
在访问 user.php 时出现 MySQL 错误：
- SQL语句：SELECT * FROM acbra3_user_sync WHERE target_username = 'Amarillo_NMC'
- 数据库错误：1146 Table 'acdts.acbra3_user_sync' doesn't exist

问题原因：
1. `get_user_sync_status()` 函数直接查询 user_sync 表，但没有确保表存在
2. `get_user_sync_info()` 函数也有同样的问题
3. `get_reverse_migration_status()` 函数也可能遇到相同问题
4. 表创建函数中使用了不兼容的 'SILENT' 参数

修复内容：

### 1. 函数修复

#### 1.1 get_user_sync_status() 函数
**修复前：**
```php
function get_user_sync_status($username) {
    global $db, $gtablepre;
    
    $username = addslashes($username);
    $result = $db->query("SELECT * FROM {$gtablepre}user_sync WHERE target_username = '$username'");
    // ...
}
```

**修复后：**
```php
function get_user_sync_status($username) {
    global $db, $gtablepre;
    
    // 确保同步表存在
    create_sync_table_if_not_exists();
    
    $username = addslashes($username);
    $result = $db->query("SELECT * FROM {$gtablepre}user_sync WHERE target_username = '$username'");
    // ...
}
```

#### 1.2 get_user_sync_info() 函数
**修复前：**
```php
function get_user_sync_info($master_username) {
    global $db, $gtablepre;
    
    $master_username = addslashes($master_username);
    $result = $db->query("SELECT * FROM {$gtablepre}user_sync WHERE master_username = '$master_username'");
    // ...
}
```

**修复后：**
```php
function get_user_sync_info($master_username) {
    global $db, $gtablepre;
    
    // 确保同步表存在
    create_sync_table_if_not_exists();
    
    $master_username = addslashes($master_username);
    $result = $db->query("SELECT * FROM {$gtablepre}user_sync WHERE master_username = '$master_username'");
    // ...
}
```

#### 1.3 get_reverse_migration_status() 函数
**修复前：**
```php
function get_reverse_migration_status($username) {
    global $db, $gtablepre;

    $username = addslashes($username);
    $result = $db->query("SELECT * FROM {$gtablepre}reverse_migration WHERE target_username = '$username'");
    // ...
}
```

**修复后：**
```php
function get_reverse_migration_status($username) {
    global $db, $gtablepre;

    // 确保反向迁移表存在
    create_reverse_migration_table_if_not_exists();

    $username = addslashes($username);
    $result = $db->query("SELECT * FROM {$gtablepre}reverse_migration WHERE target_username = '$username'");
    // ...
}
```

### 2. 表创建函数修复

#### 2.1 create_sync_table_if_not_exists() 函数
**修复前：**
```php
$result = $db->query("SHOW TABLES LIKE '$table_name'", 'SILENT');

if(!$db->num_rows($result)) {
    // 创建表
}
```

**修复后：**
```php
$result = $db->query("SHOW TABLES LIKE '$table_name'");

if(!$result || !$db->num_rows($result)) {
    // 创建表
}
```

#### 2.2 create_reverse_migration_table_if_not_exists() 函数
**修复前：**
```php
$result = $db->query("SHOW TABLES LIKE '{$gtablepre}reverse_migration'");
if(!$db->num_rows($result)) {
    // 创建表
}
```

**修复后：**
```php
$result = $db->query("SHOW TABLES LIKE '{$gtablepre}reverse_migration'");
if(!$result || !$db->num_rows($result)) {
    // 创建表
}
```

### 3. 修复的技术要点

#### 3.1 自动表创建
- 所有查询函数在执行前都会确保相关表存在
- 避免了手动创建表的需要
- 提高了系统的健壮性

#### 3.2 错误处理改进
- 移除了不兼容的 'SILENT' 参数
- 添加了 `!$result` 检查，处理查询失败的情况
- 确保在各种数据库环境下都能正常工作

#### 3.3 表结构定义
**user_sync 表：**
```sql
CREATE TABLE `{$gtablepre}user_sync` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `target_username` char(15) NOT NULL DEFAULT '',
    `master_username` char(15) NOT NULL DEFAULT '',
    `sync_time` int(10) unsigned NOT NULL DEFAULT '0',
    PRIMARY KEY (`id`),
    UNIQUE KEY `target_username` (`target_username`),
    KEY `master_username` (`master_username`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
```

**reverse_migration 表：**
```sql
CREATE TABLE `{$gtablepre}reverse_migration` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `target_username` char(15) NOT NULL DEFAULT '',
    `master_username` char(15) NOT NULL DEFAULT '',
    `sync_time` int(10) unsigned NOT NULL DEFAULT '0',
    PRIMARY KEY (`id`),
    UNIQUE KEY `target_username` (`target_username`),
    KEY `master_username` (`master_username`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
```

### 4. 修复后的效果

#### 4.1 用户体验改进
- 用户访问 user.php 不再出现数据库错误
- 主从同步功能可以正常显示和使用
- 反向迁移功能可以正常显示和使用

#### 4.2 系统稳定性
- 自动创建必要的数据库表
- 避免了因表不存在导致的系统错误
- 提高了部署的便利性

#### 4.3 兼容性
- 移除了可能不兼容的数据库查询参数
- 增强了错误处理机制
- 适用于不同的 MySQL 版本和配置

### 5. 部署验证

#### 5.1 验证步骤
1. 访问 user.php 页面
2. 检查是否正常加载用户界面
3. 验证主从同步功能是否显示
4. 验证反向迁移功能是否显示
5. 检查数据库中是否自动创建了相关表

#### 5.2 预期结果
- 页面正常加载，无数据库错误
- 根据 slave_level 配置正确显示相应功能
- 数据库中自动创建 user_sync 和 reverse_migration 表
- 所有功能可以正常使用

这个修复确保了主从同步和反向迁移功能在首次部署时能够正常工作，无需手动创建数据库表，提高了系统的易用性和稳定性。
