zblog提示 SQLite3::query(): table x_talklee already exists 错误的解决办法

2021-09-29 14:45:10 浏览数 (1)

我接触zblog已经有几年时间了,最初的asp access,后来15年把原来的asp转换了php mysql,这里可能有的网友会问,为什么说这些,因为我没接触过SQLite数据库,所以当有网友反馈使用SQLite数据库出错的时候我却无从下手,研究一天还是没有解决,最终弄个测试站,安装SQLite数据库,结果发现在首次启用主题的时候没有任何错误,只是后续启用主题的时候出现“SQLite3::query(): table zbp_cardslee already exists”,其中 zbp_cardslee 是主题自带的数据库表,如图:

翻一下错误提示,大概是说SQLite数据表已经存在“zbp_cardslee”,所以无法继续执行,如果这个错误仅仅是个提示倒也算了,毕竟主题还是能使用的,但是就这个错误提示之后主题自带的模块都没有了,也就导致主题核心代码不全,部分功能无法加载,还是不能忽略得继续解决,没办法了,只能修改轮播代码插入方式了,把代码重组了一遍,借鉴了(说难听点就是抄袭)拓源主题的幻灯片代码,不创建表格的形式解决了此问题。

虽说换了一种方案避免了此次错误,但如有以后在遇到怎么办呢?查询了官网的wiki和请教群里大佬们之后,需要做一个判断,然后存在数据表则略表不执行,但是代码添加之后还是无效,因为mysql和SQLite数据库不同,所以请求猪了,在猪猪大佬给的疯狂提示下,最终有了解决办法:

解决方案代码:

代码语言:javascript复制
//幻灯片
function 主题ID_CreateTable() {
    global $zbp;
	$sqlite_cardslee_Table = str_replace('%pre%',$zbp->db->dbpre,$GLOBALS['cardslee_Table']);
	if ($zbp->db->ExistTable($sqlite_cardslee_Table) == false) {
		$s = $zbp->db->sql->CreateTable($GLOBALS['cardslee_Table'],$GLOBALS['cardslee_DataInfo']);
		$zbp->db->QueryMulit($s);
	}
}

代码如上,问题至此得到完美的解决,原理不晓得,但是就是把mysql数据库的“%pre%”直接输出数据表吧,然后判断表存在则不输出,其实在mysql数据库下,不需要“$sqlite_cardslee_Table”转换,但是在SQLite没有这个命令判断的确无效,哎呀烦死了,啥也不懂。

对了代码不要照搬了毕竟某些函数是自定义的,我也仅仅是记录下解决的过程,但是我最终还是决定摒弃新建数据的放弃改用拓源幻灯片的方案,在此基础上修改了样式,看起来更舒服一些,好了教程完事了,接下来就是主题所有更换幻灯片的代码了,相信我只是一个大工程!

0 人点赞