Browse Source

20220307

pull/47/head
xiaoz 3 years ago
parent
commit
32d610e74e
  1. 70
      class/Api.php
  2. 18
      controller/api.php
  3. 3
      data/update.log
  4. 0
      db/sql/20220101.sql
  5. 0
      db/sql/20220301.sql
  6. 11
      db/sql/on_db_logs.sql

70
class/Api.php

@ -631,6 +631,76 @@ class Api {
$this->err_msg(-1,'Weak password!'); $this->err_msg(-1,'Weak password!');
} }
} }
/**
* 获取SQL更新列表
* 循环读取db/sql/目录下的.sql文件
*/
public function get_sql_update_list($data) {
//待升级的数据库文件目录
$sql_dir = 'db/sql/';
//sql文件列表,默认为空
$sql_files_all = [];
//打开一个目录,读取里面的文件列表
if (is_dir($sql_dir)){
if ($dh = opendir($sql_dir)){
while (($file = readdir($dh)) !== false){
//排除.和..
if ( ($file != ".") && ($file != "..") ) {
array_push($sql_files_all,$file);
}
}
//关闭句柄
closedir($dh);
}
}
//判断数据库日志表是否存在
$sql = "SELECT count(*) AS num FROM sqlite_master WHERE type='table' AND name='on_db_logs'";
//查询结果
$q_result = $this->db->query($sql)->fetchAll();
//如果数量为0,则说明on_db_logs这个表不存在,需要提前导入
$num = intval($q_result[0]['num']);
if ( $num === 0 ) {
$data = [
"code" => 0,
"data" => ['on_db_logs']
];
exit(json_encode($data));
}
}
/**
* 执行SQL更新语句,只执行单条更新
*/
public function exe_sql($data) {
//数据库sql目录
$sql_dir = 'db/sql/';
$name = $data['name'];
$sql_name = $sql_dir.$name.'.sql';
//如果文件不存在,直接返回错误
if ( !file_exists($sql_name) ) {
$this->err_msg(-2000,$name.'.sql不存在!');
}
//读取需要更新的SQL内容
try {
$sql_content = file_get_contents($sql_name);
$result = $this->db->query($sql_content);
//如果SQL执行成功,则返回
if( $result ) {
$data = [
"code" => 0,
"data" => $name.".sql更新完成!"
];
exit(json_encode($data));
}
else{
//如果执行失败
$this->err_msg(-2000,$name.".sql更新失败,请人工检查!");
}
} catch(Exception $e){
$this->err_msg(-2000,$e->getMessage());
}
}
} }

18
controller/api.php

@ -57,6 +57,12 @@ switch ($method) {
case 'get_a_link': case 'get_a_link':
get_a_link($api); get_a_link($api);
break; break;
case 'get_sql_update_list':
get_sql_update_list($api);
break;
case 'exe_sql':
exe_sql($api);
break;
default: default:
# code... # code...
break; break;
@ -242,3 +248,15 @@ function check_weak_password($api) {
$token = $_POST['token']; $token = $_POST['token'];
$api->check_weak_password($token); $api->check_weak_password($token);
} }
//获取sql更新列表
function get_sql_update_list($api){
$data = [];
$api->get_sql_update_list($data);
}
//执行SQL更新
function exe_sql($api) {
$data['name'] = htmlspecialchars(trim($_GET['name']));
$api->exe_sql($data);
}

3
data/update.log

@ -43,3 +43,6 @@ CREATE INDEX on_options_key_IDX ON on_options ("key");
1. 新增HttpOnly支持 1. 新增HttpOnly支持
2. API新增查询单个链接信息get_a_link 2. API新增查询单个链接信息get_a_link
3. API支持查询指定分类下的链接link_list,传递参数category_id 3. API支持查询指定分类下的链接link_list,传递参数category_id
20220307
1. 数据库SQL更新API(尚未写完,下班了,先提交)

0
db/sql/20220101.sql

0
db/sql/20220301.sql

11
db/sql/on_db_logs.sql

@ -0,0 +1,11 @@
-- 2022/03/07数据库升级脚本
-- 创建数据库升级记录表,用于新增的SQL升级成功后记录到表,方便下次比对
CREATE TABLE on_db_logs (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
sql_name TEXT(32) NOT NULL,
update_time NUMERIC NOT NULL,
status TEXT(5) DEFAULT true NOT NULL,
extra TEXT(512),
CONSTRAINT on_db_logs_UN UNIQUE (sql_name)
);
CREATE UNIQUE INDEX on_db_logs_sql_name_IDX ON on_db_logs (sql_name);
Loading…
Cancel
Save