You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
115 lines
4.3 KiB
115 lines
4.3 KiB
<?php
|
|
defined('IN_IA') or exit('Access Denied');
|
|
|
|
class MysqlFunction {
|
|
/**
|
|
* Comment: [由于数据库权限问题,当前方法弃用]创建数据库方法 —— 距离获取(需要数据库存在lng,lat两个字段才能使用)
|
|
* Author: zzw
|
|
* Date: 2019/12/16 18:36
|
|
* @param string $tableName 表名称(非全名;例如:citycard_lists)
|
|
*/
|
|
public static function getDistance($tableName){
|
|
$table = tablename(PDO_NAME.$tableName);
|
|
$functionName = "get_distance_{$tableName}";
|
|
//判断方法是否存在
|
|
$isHave = pdo_fetch(" SHOW CREATE FUNCTION {$functionName};");
|
|
if(!$isHave){
|
|
$functionSql = "CREATE FUNCTION {$functionName}(object_lat VARCHAR(16),object_lng VARCHAR(16),object_id INT(11)) RETURNS FLOAT
|
|
BEGIN
|
|
DECLARE distances DOUBLE DEFAULT 0;
|
|
SELECT
|
|
CASE
|
|
WHEN object_lat > 0 AND object_lng > 0 THEN ROUND(6378.138 * 2 * ASIN(
|
|
SQRT(
|
|
POW(SIN((object_lat * PI() / 180 - lat * PI() / 180) / 2),2) +
|
|
COS(object_lat * PI() / 180) * COS(lat * PI() / 180) *
|
|
POW(SIN((object_lng * PI() / 180 - lng * PI() / 180) / 2),2)
|
|
)
|
|
) * 1000
|
|
)
|
|
ELSE 0
|
|
END INTO distances FROM ".$table." WHERE id = object_id;
|
|
RETURN distances;
|
|
END";
|
|
pdo_fetch($functionSql);//建立方法
|
|
}
|
|
//$list = pdo_fetch("SELECT {$functionName}({$lat},{$lng},6)");//使用方法
|
|
//pdo_fetch(" DROP FUNCTION {$functionName};");//删除方法
|
|
}
|
|
/**
|
|
* Comment: [由于数据库权限问题,当前方法弃用]获取总数
|
|
* Author: zzw
|
|
* Date: 2019/12/17 10:37
|
|
* @param string $tableName 表名称
|
|
* @param int $field 条件字段(id)
|
|
*/
|
|
public static function getCount($tableName,$field){
|
|
$table = tablename(PDO_NAME.$tableName);
|
|
$functionName = "get_count_{$tableName}";
|
|
//判断方法是否存在
|
|
$isHave = pdo_fetch(" SHOW CREATE FUNCTION {$functionName};");
|
|
if(!$isHave){
|
|
$functionSql = "CREATE FUNCTION {$functionName}(id int(11)) RETURNS INT
|
|
BEGIN
|
|
DECLARE count_num DOUBLE DEFAULT 0;
|
|
SELECT COUNT(*) INTO count_num FROM ".$table." WHERE {$field} = id;
|
|
RETURN count_num;
|
|
END";
|
|
pdo_fetch($functionSql);//建立方法
|
|
}
|
|
}
|
|
/**
|
|
* Comment: 设置隔离等级
|
|
* Author: wlf
|
|
* Date: 2020/01/02 16:42
|
|
* @return string $level 隔离等级 (1 READ UNCOMMITTED 读未提交 2 READ COMMITTED 读提交 3 REPEATABLE READ 可重复读 4 SERIALIZABLE 串行化)
|
|
*/
|
|
public function setTrans($level = 1){
|
|
switch ($level){
|
|
case 1:
|
|
$levelset = 'READ UNCOMMITTED';
|
|
break;
|
|
case 2:
|
|
$levelset = 'READ COMMITTED';
|
|
break;
|
|
case 3:
|
|
$levelset = 'REPEATABLE READ';
|
|
break;
|
|
case 4:
|
|
$levelset = 'SERIALIZABLE';
|
|
break;
|
|
}
|
|
return pdo_query(" SET SESSION TRANSACTION ISOLATION LEVEL {$levelset}");
|
|
}
|
|
/**
|
|
* Comment: 开启事务处理
|
|
* Author: zzw
|
|
* Date: 2019/8/15 11:47
|
|
* @return bool
|
|
*/
|
|
public function startTrans(){
|
|
return pdo_query(" BEGIN ");
|
|
}
|
|
/**
|
|
* Comment: 提交事务处理
|
|
* Author: zzw
|
|
* Date: 2019/8/15 11:47
|
|
* @return bool
|
|
*/
|
|
public function commit(){
|
|
return pdo_query(" COMMIT ");
|
|
}
|
|
/**
|
|
* Comment: 事务回滚
|
|
* Author: zzw
|
|
* Date: 2019/8/15 11:47
|
|
* @return bool
|
|
*/
|
|
public function rollback(){
|
|
return pdo_query(" ROLLBACK ");
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|