注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

浮游生物的博客

以扯蛋的态度面对操蛋的人生

 
 
 

日志

 
 

phpcms整站代码分析(五)  

2011-03-04 13:33:12|  分类: PHP |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
这个讲   phpcms 的数据库类   和   phpcms 的文本缓存的实现.看了看

都是很简单的东西.大家看着我注释慢慢看吧.慢慢理解,最好能装了PHPCMS 在来看.因为这样可以看下它的数据库结构信息.可以帮助理解.

不明白的继续问吧.

首先是数据库类,phpcms 的数据库 分mysql 和mssql 版本.   MSSQL 版本的我就不说了.   他们主要的sql 语句不同点就在于我们分页常用到的 limit   语句.所以.在 mssql 数据库类驱动里.他做了个挺好的封装.让mysql 和MSSQL在SQL语句方面的差异性就很小了.可以说PHPCMS你可以随便转换数据库只要在代码中换下数据库类驱动就行.
引用:


<?php
/**
mysql数据库类。写得比较简单。也没什么好说的。大家自己看下理解下。
然后就可以跳过了。
*/
defined('IN_PHPCMS') or exit('Access Denied');
/**
这个东西是不是很熟呀。对了。在上一章已经讲过了。也已经在上一章的common.inc.php 启动文件里面定义了   IN_PHPCMS 所以在以下的PHP文件里都检测下是否是人为”跳墙“进来的。是就中断
*/
/**
* 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;
  
$func = $pconnect == 1 ? 'mysql_pconnect' : 'mysql_connect';
  
/**
  mysql_pconnect()   为常连接。它和mysql_connect 的区别是 前者在多进程的WEB服务器上效率比较好。但也有瑕疵就是在有关事务和数据表锁方面。详情请查看自己的手册。
   */
  
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 = '')
{
  
$func = $type == 'UNBUFFERED' ? 'mysql_unbuffered_query' : 'mysql_query';
  
/**
  mysql_unbuffered_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()
{
   return
intval(@mysql_errno($this->connid)) ;
}
/**
mysql_errno()   函数也挺好使的哦。自己试下
*/
/**
* 显示mysql错误信息
*/
function halt($message = '', $sql = '')
{
   exit(
"mysql Query:$sql <br> mysql Error:".$this->error()." <br> mysql Errno:".$this->errno()." <br> Message:$message");
}
}
?>
  评论这张
 
阅读(633)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018