您现在的位置是:首页 > cms教程 > phpcms教程phpcms教程
phpcms源码分析数据库类实现方法
从蓉2025-06-12phpcms教程已有人查阅
导读这个讲phpcms 的数据库类和phpcms 的文本缓存的实现.看了看都是很简单的东西.大家看着我注释慢慢看吧.慢慢理解,较好能装了PHPCMS
这个讲phpcms 的数据库类和phpcms 的文本缓存的实现.看了看都是很简单的东西.大家看着我注释慢慢看吧.慢慢理解,较好能装了PHPCMS 在来看.因为这样可以看下它的数据库结构信息.可以帮助理解.
不明白的继续问吧.
首先是数据库类,phpcms 的数据库 分mysql 和mssql 版本.MSSQL 版本的我就不说了.
他们主要的sql 语句不同点就在于我们分页常用到的 limit语句.所以.在 mssql 数据库类驱动里.他做了个挺好的封装.
让MYSQL 和MSSQL在SQL语句方面的差异性就很小了.可以说PHPCMS你可以随便转换数据库只要在代码中换下数据库类驱动就行.
不明白的继续问吧.
首先是数据库类,phpcms 的数据库 分mysql 和mssql 版本.MSSQL 版本的我就不说了.
他们主要的sql 语句不同点就在于我们分页常用到的 limit语句.所以.在 mssql 数据库类驱动里.他做了个挺好的封装.
让MYSQL 和MSSQL在SQL语句方面的差异性就很小了.可以说PHPCMS你可以随便转换数据库只要在代码中换下数据库类驱动就行.
<?php
/*
mysql数据库类。写得比较简单。也没什么好说的。大家自己看下理解下。
然后就可以跳过了。
*/
/*
这个东西是不是很熟呀。对了。在上一章已经讲过了。也已经在上一章的common.inc.php 启动文件里面定义了IN_PHPCMS
所以在以下的PHP文件里都检测下是否是人为”跳墙“进来的。是就中断
*/
defined('IN_PHPCMS') or exit('Access Denied');
/*
* Mysql 数据库类,支持Cache功能
*/
class db_mysql
{
/*
* MySQL 连接标识
* @var resource
*/
var $connid;
/*
* 整型变量用来计算被执行的sql语句数量
* @var int
*/
var $querynum = 0;
/*
* 数据库连接,返回数据库连接标识符
* @param string 数据库服务器主机
* @param string 数据库服务器帐号
* @param string 数据库服务器密码
* @param string 数据库名
* @param bool 是否保持持续连接,1为持续连接,0为非持续连接
* @return link_identifier
*/
function connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect = 0)
{
global $CONFIG;
/*
mysql_pconnect()为常连接。它和mysql_connect 的区别是 前者在多进程的WEB服务器上效率比较好。
但也有瑕疵就是在有关事务和数据表锁方面。详情请查看自己的手册。
*/
$func = $pconnect == 1 ? 'mysql_pconnect' : 'mysql_connect';
if(!$this->connid = @$func($dbhost, $dbuser, $dbpw))
{
$this->halt('Can not connect to MySQL server');
}
// 当mysql版本为4.1以上时,启用数据库字符集设置
if($this->version() > '4.1' && $CONFIG['dbcharset'])
{
mysql_query("SET NAMES '".$CONFIG['dbcharset']."'" , $this->connid);
}
// 当mysql版本为5.0以上时,设置sql mode,mysql5数据库带了字符集模式。设置下就好
if($this->version() > '5.0')
{
mysql_query("SET sql_mode=''" , $this->connid);
}
if($dbname)
{
// if($email=!@mysql_select_db($dbname)!@mysql_select_db($dbname($email) , $this->connid))
{
$this->halt('Cannot use database '.$dbname);
}
}
return $this->connid;
}
/*
* 选择数据库
* @param string 数据库名
*/
function select_db($dbname)
{
return mysql_select_db($dbname , $this->connid);
}
/*
* 执行sql语句
* @param string sql语句
* @param string 默认为空,可选值为 CACHE UNBUFFERED
* @param int Cache以 秒为单位 的生命周期
* @return resource
*/
function query($sql , $type = '' , $expires = 3600, $dbname = '')
{
/*
mysql_unbuffered_query 效率更好。节省内存 看手册
*/
$func = $type == 'UNBUFFERED' ? 'mysql_unbuffered_query' : 'mysql_query';
if(!($query = $func($sql , $this->connid)) && $type != 'SILENT')
{
$this->halt('MySQL Query Error', $sql);
}
$this->querynum++;
return $query;
}
/*
* 执行sql语句,只得到一条记录
* @param string sql语句
* @param string 默认为空,可选值为 CACHE UNBUFFERED
* @param int Cache以秒为单位的生命周期
* @return array
*/
function get_one($sql, $type = '', $expires = 3600, $dbname = '')
{
$query = $this->query($sql, $type, $expires, $dbname);
$rs = $this->fetch_array($query);
$this->free_result($query);
return $rs ;
}
/*
* 从结果集中取得一行作为关联数组
* @param resource 数据库查询结果资源
* @param string 定义返回类型
* @return array
*/
function fetch_array($query, $result_type = MYSQL_ASSOC)
{
return mysql_fetch_array($query, $result_type);
}
/*
* 取得前一次 MySQL 操作所影响的记录行数
* @return int
*/
function affected_rows()
{
return mysql_affected_rows($this->connid);
}
/*
* 取得结果集中行的数目
* @return int
*/
function num_rows($query)
{
return mysql_num_rows($query);
}
/*
* 返回结果集中字段的数目
* @return int
*/
function num_fields($query)
{
return mysql_num_fields($query);
}
/*
* @return array
*/
function result($query, $row)
{
return @mysql_result($query, $row);
}
function free_result($query)
{
return mysql_free_result($query);
}
/*
* 取得上一步 INSERT 操作产生的 ID
* @return int
*/
function insert_id()
{
return mysql_insert_id($this->connid);
}
/*
* @return array
*/
function fetch_row($query)
{
return mysql_fetch_row($query);
}
/*
* @return string
*/
function version()
{
return mysql_get_server_info($this->connid);
}
function close()
{
return mysql_close($this->connid);
}
/*
* @return string
*/
function error()
{
return @mysql_error($this->connid);
}
/*
* @return int
*/
function errno()
{
/*
mysql_errno()函数也挺好使的哦。自己试下
*/
return intval(@mysql_errno($this->connid)) ;
}
/*
* 显示mysql错误信息
*/
function halt($message = '', $sql = '')
{
exit("MySQL Query:$sql <br>
MySQL Error:".$this->error()." <br>
MySQL Errno:".$this->errno()." <br>
Message:$message");
}
}
?>
本文标签:
很赞哦! ()
相关教程
图文教程
phpcms v9.6.0 sql注入漏洞分析
昨天爆出来的,但其实在此之前就i记得在某群看见有大牛在群里装逼了。一直也没肯告诉。现在爆出来了。就来分析一下。官方现在也还没给出修复。该文不给出任何利用的EXP。
PhpcmsV9单页添加自定义字段的实现方法
说起文章自定义自段,大家都会想到wordpress的自定义字段,确实wordpress系统很强大,字段可以很灵活的在后台进行添加与更新,并能够很好的在前台进行调用
phpcms有控制器吗?怎么新增一个控制器?
phpcms有控制器。phpcms控制器是模块的类文件,储存在“phpcms/modules”下面,每个模块都是独立的命名方式,类名是“文件名+.php命名”格式;控制器类默认继承系统的函数库
PHPCMSV9开发文档
内容模块PC标签调用说明模块名:content模块提供的可用操作操作名 说明lists 内容数据列表relation 内容相关文章hits 内容数据点击排行榜
相关源码
-
(自适应响应式)HTML5甲醛环境检测网站模板带在线留言和资料下载本模板为甲醛检测与环保科技企业开发,采用PbootCMS内核构建。首页集成空气质量数据可视化模块,服务流程采用时间轴展示设计,检测报告板块支持PDF在线预览功能查看源码 -
帝国cms7.5个人博客资讯文章模板下载本模板简洁个人博客网站设计开发,采用帝国CMS内核构建,只需替换文字图片即可快速搭建专业网站。自适应手机端设计,数据实时同步,操作简单便捷。PHP程序确保安全稳定运行,帮助您以较低成本获取持续业务。查看源码 -
(响应式)轴承机械五金零件产品pbootcms落地推广单页源码下载为轴承、机械零件等工业产品打造的响应式单页模板,基于PbootCMS内核开发,助力企业快速构建专业级产品展示页面。模板采用工业风设计语言,突出产品参数与性能优势,适用于设备制造商、零部件供应商等B2B场景推广。查看源码 -
帝国cms7.5品牌连锁店招商加盟商机网站模版源码本模板为招商加盟、创业投资、品牌连锁等商业领域设计,采用帝国CMS7.5内核构建,整体风格简洁大气,突出商业信任感与专业度,适合各类招商加盟项目展示、品牌连锁店宣传等商业应用场景。查看源码 -
响应式WordPress简约博客主题Alt_BlogAlt_Blog主题该模板为博客内容展示设计,采用简约现代的风格理念,打造清晰的内容呈现平台。响应式布局确保在不同设备上都能获得良好的浏览体验,帮助博主更好地展示和分享内容。查看源码 -
(PC+WAP)蓝色公司注册财务会计公证律师网站源码下载本模板基于PbootCMS内核开发,为财务会计事务所、律师公证机构等专业服务机构打造。采用自适应设计,确保在各类设备上都能呈现专业视觉效果,帮助机构建立值得信赖的线上形象。查看源码
| 分享笔记 (共有 篇笔记) |
