检测是否存在某数据表函数IsTable($tbname)

admin2020-01-161011

一看这个就知道是一个关于数据库操作的函数,没有错,其实这个函数在织梦二次开发过程中基本用不到,但是,除非进行底层开发,否则这个使用率极低。如果你进行织梦静态标签开发的话,那么,这个函数就会用到,例如,会判断某个插件表是否存在等。

函数所在文件/include/dedesql.class.php

返回值:布尔值

函数代码:

215319q4yfel99rpyn2o20.jpg

代码分析开始:

首先,判断一下是不是已经连接到数据库了,如果我们查询表连数据库都没有连接的话,就无从查起,因为,表存放在数据库里面就像我们封死的仓库一样,若不开个门我们就取不出任何内容来,跟这个是同样的道理。若没有连接就去连接数据库,连接成功后,就执行下面的代码。

因为,每个人安装织梦程序后,可能使用的前缀不一样,所以,查询数据库表必须先把前缀解决掉,如何解决这个问题呢?因为,我们安装完程序后,在data目录里面就会生成一个数据库配置文件common.inc.php,这个文件里面就有站长安装后,配置的数据库表前缀。所以,知道了这些我们在查询某数据库表时,就用common.inc.php里面的表前缀来替换掉#@__,这样我们查询的表就可以正确查询出来了。

首先定义符号$prefix="#@__";

然后,用common.inc.php里面的表前经替换这个符号,代码是:

$tbname = str_replace($prefix, $GLOBALS['cfg_dbprefix'], $tbname);

这虽然是一个很小的方法,但是,我们可以从中发现很多东西,例如,在安装织梦时,我们可以把需要的内容生成,然后,在织梦二次开发时,就可以去使用了,这样说好像不好理解,就拿上面这个前缀例子来理解吧。

这样替换好了后,我们得到的才是站长安装好后的真正的表名,接下来才直正去查询这个表,看看在数据库里面有没有。

查询表中与$tbname同名的表:

@mysql_query("SHOW TABLES LIKE '".$tbname."'", $this->linkID))

函数返回结果集中行的数目:mysql_num_rows()

知道了这二个sql语句,那么,就很容易理解这个函数了吧。


网友评论