当前位置:首页 > 叨叨念念 > Emlog gid自增断号自动插入

Emlog gid自增断号自动插入

叨叨念念 / 星之宇 / 2021-7-14 8:00 / 浏览:2879 / 评论:0

emlog文章使用的是blog表中gid自增来作为文章的ID,但是由于后台有删除文章的功能,一旦删除文章那么gid自增就会出现断号。

解决删除导致断号的问题有2种方法:

方法一:不删除文章,采用转为草稿再重新编辑发布的方法,适用于没有删除过文章的。(一般都已经删除文章了才会找到这篇文章)

方法二:只要在添加文章的时候判断gid之前的有没有断号问题,有的话直接插入,没有的话自增。


修改方法

找到我们的addlog添加文章和页面的函数addlog,路径在include/model/log_model.php。

by 2023-03-26

支持最新版本emlog pro v2.0.3

优化了代码机制,性能更佳,通过把gid自增段顺序读取,然后通过$i+1的方式看gid是否等于i,不等于就是断号,跳出循环。

	public function addlog($logData) {
		$kItem = $dItem = [];
		foreach ($logData as $key => $data) {
			$kItem[] = $key;
			$dItem[] = $data;
		}
		$field = implode(',', $kItem);
		$values = "'" . implode("','", $dItem) . "'";
		$this->db->query("INSERT INTO $this->table ($field) VALUES ($values)");
		return $this->db->insert_id();
	}

修改为

	public function addlog($logData) {
		$kItem = $dItem = [];
		foreach ($logData as $key => $data) {
			$kItem[] = $key;
			$dItem[] = $data;
		}
		$field = implode(',', $kItem);
		$values = "'" . implode("','", $dItem) . "'";
		$i = 0;
		$res = $this->db->query("SELECT gid From $this->table ORDER BY gid ASC");
		while ($row = $this->db->fetch_array($res)) {
			$i++;
			if($i!=$row['gid']){
				$field = 'gid,'.$field;
				$values = "'".$i."',".$values;
				break;
			}
		}
		$this->db->query("INSERT INTO $this->table ($field) VALUES ($values)");
		return $this->db->insert_id();
	}


老版本原始代码:

把gid自增段顺序读取作为值写入数组,自增段是从1开始的,但是数组键值是0开始的,那么先把数组($gidarr[0]='0')赋值掉,然后把$gidarr[]=gid,然后只要发现$gidarr键和键值不等就是断号了。

	function addlog($logData) {
		$kItem = array();
		$dItem = array();
		foreach ($logData as $key => $data) {
			$kItem[] = $key;
			$dItem[] = $data;
		}
		$field = implode(',', $kItem);
		$values = "'" . implode("','", $dItem) . "'";
		$this->db->query("INSERT INTO " . DB_PREFIX . "blog ($field) VALUES ($values)");
		$logid = $this->db->insert_id();
		return $logid;
	}

修改为

function addlog($logData) {
	$kItem = array();
	$dItem = array();
	foreach ($logData as $key => $data) {
		$kItem[] = $key;
		$dItem[] = $data;
	}
	$field = implode(',', $kItem);
	$values = "'" . implode("','", $dItem) . "'";
	$gidarr[0]='0';
	$res = $this->db->query("SELECT gid From  " . DB_PREFIX . "blog ORDER BY gid ASC");
	while ($row = $this->db->fetch_array($res)) {
		$gidarr[] = $row['gid'];
	}
	foreach($gidarr as $key=>$val){
		if($key!=$val){
			$field = 'gid,'.$field;
			$values = "'".$key."',".$values;
			break;
		}
	}
	$this->db->query("INSERT INTO " . DB_PREFIX . "blog ($field) VALUES ($values)");
	$logid = $this->db->insert_id();
	return $logid;
}

通过改变是否需要插入语句添加gid和gid值来自增或者插入。

假如你有多篇文章删除,添加一篇的话,只有从开始的断号,慢慢补全断号。自己根据原始代码判断下用哪个版本的代码。

目前有 0 条评论

    • 昵称
    • 邮箱
    • 网址