235 lines
6.5 KiB
PHP
235 lines
6.5 KiB
PHP
<?php
|
|
/**
|
|
* ThinkShop商城系统 - 团队十年电商经验汇集巨献!
|
|
* =========================================================
|
|
* Copy right 2019-2029 成都云之牛科技有限公司, 保留所有权利。
|
|
* ----------------------------------------------
|
|
* 官方网址: https://www.cdcloudshop.com
|
|
|
|
* =========================================================
|
|
*/
|
|
|
|
namespace app\model\system;
|
|
|
|
use think\facade\Db;
|
|
use app\model\BaseModel;
|
|
|
|
/**
|
|
* 数据库操作
|
|
*/
|
|
class Database extends BaseModel
|
|
{
|
|
|
|
public $backup_path = __UPLOAD__ . '/dbsql';
|
|
|
|
/***********************************************************SQL开始*********************************************************/
|
|
|
|
/**
|
|
* 修复表
|
|
*/
|
|
public function repair($tables)
|
|
{
|
|
if ($tables) {
|
|
Db::startTrans();
|
|
try {
|
|
if (is_array($tables)) {
|
|
$tables = implode('`,`', $tables);
|
|
Db::query("REPAIR TABLE `{$tables}`");
|
|
} else {
|
|
Db::query("REPAIR TABLE `{$tables}`");
|
|
}
|
|
Db::commit();
|
|
return $this->success(1);
|
|
} catch (\Exception $e) {
|
|
// 回滚事务
|
|
Db::rollback();
|
|
return $this->error('', "DABASE_REPAIR_FAIL");
|
|
}
|
|
} else {
|
|
return $this->error('', "DABASE_REPAIR_FAIL");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 优化表
|
|
*/
|
|
public function optimize($tables)
|
|
{
|
|
if ($tables) {
|
|
if (is_array($tables)) {
|
|
$tables = implode('`,`', $tables);
|
|
$list = Db::query("OPTIMIZE TABLE `{$tables}`");
|
|
if ($list) {
|
|
|
|
return $this->success(1);
|
|
} else {
|
|
return $this->error('', "DATABASE_OPTIMIZE_FAIL");
|
|
}
|
|
} else {
|
|
$list = Db::query("OPTIMIZE TABLE `{$tables}`");
|
|
if ($list) {
|
|
return $this->success(1);
|
|
} else {
|
|
return $this->error('', "DATABASE_OPTIMIZE_FAIL");
|
|
}
|
|
}
|
|
} else {
|
|
return $this->error('', "REQUEST_DATABASE_TABLE");
|
|
}
|
|
}
|
|
|
|
private function sql_execute($sql, $is_debug)
|
|
{
|
|
if (trim($sql) != '') {
|
|
$sql = str_replace("\r\n", "\n", $sql);
|
|
$sql = str_replace("\r", "\n", $sql);
|
|
$sql_array = explode(";\n", $sql);
|
|
if (!$is_debug) {
|
|
Db::startTrans();
|
|
}
|
|
try {
|
|
foreach ($sql_array as $item) {
|
|
if ($is_debug) {
|
|
Db::startTrans();
|
|
}
|
|
$querySql = trim($item);
|
|
if ($querySql != '') {
|
|
@Db::execute($querySql . ";");
|
|
if ($is_debug) {
|
|
Db::rollback();
|
|
}
|
|
}
|
|
}
|
|
if (!$is_debug) {
|
|
Db::commit();
|
|
}
|
|
return $this->success(1);
|
|
} catch (\Exception $e) {
|
|
Db::rollback();
|
|
return $this->error($e->getMessage());
|
|
}
|
|
} else {
|
|
return $this->error('');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 执行sql
|
|
*/
|
|
public function sqlQuery($sql)
|
|
{
|
|
$result = $this->sql_execute($sql, false);
|
|
return $result;
|
|
}
|
|
|
|
public function yujjia($sql)
|
|
{
|
|
Db::startTrans();
|
|
try {
|
|
Db::query($sql);
|
|
Db::rollback();
|
|
return "1";
|
|
} catch (\Exception $e) {
|
|
Db::rollback();
|
|
return $this->error($e->getMessage());
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* 查询所有表
|
|
*/
|
|
public function getDatabaseList()
|
|
{
|
|
$databaseList = Db::query("SHOW TABLE STATUS");
|
|
return $databaseList;
|
|
}
|
|
|
|
/**备份数据库语句
|
|
* @return string
|
|
*/
|
|
public function backupSql($tables, $id, $start)
|
|
{
|
|
|
|
}
|
|
|
|
public function getTableSchemas($table)
|
|
{
|
|
$mysql = "DROP TABLE IF EXISTS `$table`;\r\n";
|
|
$temp_create_table_result = Db::query("show create table `$table`");
|
|
$create_table = $temp_create_table_result[0]['Create Table'];
|
|
$mysql .= $create_table . ";\r\n";
|
|
return $mysql;
|
|
}
|
|
|
|
public function getTableInsertSql($tablename, $start, $size)
|
|
{
|
|
$data = '';
|
|
$tmp = '';
|
|
$sql = "SELECT * FROM `{$tablename}` LIMIT {$start}, {$size}";
|
|
$result = Db::query($sql);
|
|
if (!empty($result)) {
|
|
foreach ($result as $row) {
|
|
$tmp .= '(';
|
|
foreach ($row as $k => $v) {
|
|
$value = str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'), $v);
|
|
$tmp .= "'" . $value . "',";
|
|
}
|
|
$tmp = rtrim($tmp, ',');
|
|
$tmp .= "),\n";
|
|
}
|
|
$tmp = rtrim($tmp, ",\n");
|
|
$data .= "INSERT INTO `{$tablename}` VALUES \n{$tmp};\n";
|
|
$datas = array(
|
|
'data' => $data,
|
|
'result' => $result,
|
|
);
|
|
return $datas;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* 格式化字节大小
|
|
*
|
|
* @param number $size
|
|
* 字节数
|
|
* @param string $delimiter
|
|
* 数字和单位分隔符
|
|
* @return string 格式化后的带单位的大小
|
|
* @author
|
|
*
|
|
*/
|
|
public function format_bytes($size, $delimiter = '')
|
|
{
|
|
$units = array(
|
|
'B',
|
|
'KB',
|
|
'MB',
|
|
'GB',
|
|
'TB',
|
|
'PB'
|
|
);
|
|
for ($i = 0; $size >= 1024 && $i < 5; $i++)
|
|
$size /= 1024;
|
|
return round($size, 2) . $delimiter . $units[$i];
|
|
}
|
|
|
|
/**
|
|
* 多维数组排序
|
|
*/
|
|
public function my_array_multisort($data, $sort_order_field, $sort_order = SORT_DESC, $sort_type = SORT_NUMERIC)
|
|
{
|
|
foreach ($data as $val) {
|
|
$key_arrays[] = $val[$sort_order_field];
|
|
}
|
|
array_multisort($key_arrays, $sort_order, $sort_type, $data);
|
|
return $data;
|
|
}
|
|
|
|
|
|
/***********************************************************SQL结束*********************************************************/
|
|
|
|
} |