php+mysql_数据库类.doc_第1页
php+mysql_数据库类.doc_第2页
php+mysql_数据库类.doc_第3页
php+mysql_数据库类.doc_第4页
php+mysql_数据库类.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

pub_db_mysql.phpisClose = false; if($nconnect) $this-Init($pconnect); function DedeSql($pconnect=false,$nconnect=true)$this-_construct($pconnect,$nconnect);function Init($pconnect=false)$this-linkID = 0;$this-queryString = ;$this-parameters = Array();$this-dbHost = $GLOBALScfg_dbhost;$this-dbUser = $GLOBALScfg_dbuser;$this-dbPwd = $GLOBALScfg_dbpwd;$this-dbName = $GLOBALScfg_dbname;$this-dbPrefix = $GLOBALScfg_dbprefix;$this-resultme = 0;$this-Open($pconnect);/用指定参数初始数据库信息/function SetSource($host,$username,$pwd,$dbname,$dbprefix=dede_)$this-dbHost = $host;$this-dbUser = $username;$this-dbPwd = $pwd;$this-dbName = $dbname;$this-dbPrefix = $dbprefix;$this-resultme = 0;function SelectDB($dbname)mysql_select_db($dbname);/设置SQL里的参数/function SetParameter($key,$value)$this-parameters$key=$value;/连接数据库/function Open($pconnect=false)global $dsql;/连接数据库if($dsql & !$dsql-isClose) $this-linkID = $dsql-linkID;else if(!$pconnect) $this-linkID = mysql_connect($this-dbHost,$this-dbUser,$this-dbPwd); else $this-linkID = mysql_pconnect($this-dbHost,$this-dbUser,$this-dbPwd); /复制一个对象副本 CopySQLPoint($this); /处理错误,成功连接则选择数据库if(!$this-linkID)/echo $this-GetError();$this-DisplayError(DedeCms错误警告:连接数据库失败,可能数据库密码不对或数据库服务器出错,如未安装本系统,请先运行安装程序,如果已经安装,请检查MySQL服务或修改include/config_base.php的配置!);exit();mysql_select_db($this-dbName);$mysqlver = explode(.,$this-GetVersion();$mysqlver = $mysqlver0.$mysqlver1;if($mysqlver4.0) mysql_query(SET NAMES .$GLOBALScfg_db_language.;,$this-linkID);if($mysqlver5.0) mysql_query(SET sql_mode= ;, $this-linkID);return true;/获得错误描述/function GetError()$str = ereg_replace(|,mysql_error();return $str;/关闭数据库/function Close()mysql_close($this-linkID);$this-isClose = true;if(is_object($GLOBALSdsql) $GLOBALSdsql-isClose = true; $this-FreeResultAll();/-/定期清理死连接/-function ClearErrLink()global $cfg_dbkill_time;if(empty($cfg_dbkill_time) $cfg_dbkill_time = 30;$result=mysql_query(SHOW PROCESSLIST,$this-linkID); if($result) while($proc=mysql_fetch_assoc($result) if($procCommand=Sleep & $procTime$cfg_dbkill_time) mysql_query(KILL .$procId,$this-linkID); /关闭指定的数据库连接/function CloseLink($dblink)mysql_close($dblink);/执行一个不返回结果的SQL语句,如update,delete,insert等/function ExecuteNoneQuery($sql=)global $dsql;if($dsql-isClose)$this-Open(false);$dsql-isClose = false;if($sql!=) $this-SetQuery($sql);if(is_array($this-parameters)foreach($this-parameters as $key=$value)$this-queryString = str_replace(.$key,$value,$this-queryString);return mysql_query($this-queryString,$this-linkID);/执行一个返回影响记录条数的SQL语句,如update,delete,insert等/function ExecuteNoneQuery2($sql=)global $dsql;if($dsql-isClose)$this-Open(false);$dsql-isClose = false;if($sql!=) $this-SetQuery($sql);if(is_array($this-parameters)foreach($this-parameters as $key=$value)$this-queryString = str_replace(.$key,$value,$this-queryString);mysql_query($this-queryString,$this-linkID);return mysql_affected_rows($this-linkID);function ExecNoneQuery($sql=)return $this-ExecuteNoneQuery($sql);/执行一个带返回结果的SQL语句,如SELECT,SHOW等/function Execute($id=me,$sql=)global $dsql;if($dsql-isClose)$this-Open(false);$dsql-isClose = false;if($sql!=) $this-SetQuery($sql);$this-result$id = mysql_query($this-queryString,$this-linkID);if(!$this-result$id)$this-DisplayError(mysql_error(). - Execute Query False! .$this-queryString.);function Query($id=me,$sql=)$this-Execute($id,$sql);/执行一个SQL语句,返回前一条记录或仅返回一条记录/function GetOne($sql=,$acctype=MYSQL_BOTH)global $dsql;if($dsql-isClose)$this-Open(false);$dsql-isClose = false;if($sql!=) if(!eregi(limit,$sql) $this-SetQuery(eregi_replace(,;$,trim($sql). limit 0,1;); else $this-SetQuery($sql);$this-Execute(one);$arr = $this-GetArray(one,$acctype);if(!is_array($arr) return();else mysql_free_result($this-resultone); return($arr);/执行一个不与任何表名有关的SQL语句,Create等/function ExecuteSafeQuery($sql,$id=me)global $dsql;if($dsql-isClose)$this-Open(false);$dsql-isClose = false;$this-result$id = mysql_query($sql,$this-linkID);/返回当前的一条记录并把游标移向下一记录/ MYSQL_ASSOC、MYSQL_NUM、MYSQL_BOTH/function GetArray($id=me,$acctype=MYSQL_BOTH)if($this-result$id=0) return false;else return mysql_fetch_array($this-result$id,$acctype);function GetObject($id=me)if($this-result$id=0) return false;else return mysql_fetch_object($this-result$id);/检测是否存在某数据表/function IsTable($tbname)$this-result0 = mysql_list_tables($this-dbName,$this-linkID);while ($row = mysql_fetch_array($this-result0)if(strtolower($row0)=strtolower($tbname)mysql_freeresult($this-result0);return true;mysql_freeresult($this-result0);return false;/获得MySql的版本号/function GetVersion()global $dsql;if($dsql-isClose)$this-Open(false);$dsql-isClose = false;$rs = mysql_query(SELECT VERSION();,$this-linkID);$row = mysql_fetch_array($rs);$mysql_version = $row0;mysql_free_result($rs);return $mysql_version;/获取特定表的信息/function GetTableFields($tbname,$id=me)$this-result$id = mysql_list_fields($this-dbName,$tbname,$this-linkID);/获取字段详细信息/function GetFieldObject($id=me)return mysql_fetch_field($this-result$id);/获得查询的总记录数/function GetTotalRow($id=me)if($this-result$id=0) return -1;else return mysql_num_rows($this-result$id);/获取上一步INSERT操作产生的ID/function GetLastID()/如果 AUTO_INCREMENT 的列的类型是 BIGINT,则 mysql_insert_id() 返回的值将不正确。/可以在 SQL 查询中用 MySQL 内部的 SQL 函数 LAST_INSERT_ID() 来替代。/$rs = mysql_query(Select LAST_INSERT_ID() as lid,$this-linkID);/$row = mysql_fetch_array($rs);/return $rowlid;return mysql_insert_id($this-linkID);/释放记录集占用的资源/function FreeResult($id=me)mysql_free_result($this-result$id);function FreeResultAll()if(!is_array($this-result) return ;foreach($this-result as $kk = $vv)if($vv) mysql_free_result($vv);/设置SQL语句,会自动把SQL语句里的#_替换为$this-dbPrefix(在配置文件中为$cfg_dbprefix)/function SetQuery($sql)$prefix=#_;$sql = str_replace($prefix,$this-dbPrefix,$sql);$this-queryString = $sql;function SetSql($sql)$this-SetQuery($sql);/显示数据链接错误信息/function DisplayError($msg)echo rn;echo rn;echo rn;echo DedeCms Error Trackrn;echo rn;echo rnrn;echo $msg;echo ;echo rnrn;echo ;/$this-Close();/exit();/复制一个对象副本function CopySQLPoint(&$ndsql)$GLOBALSdsql = $ndsql;?DEDECMS系统的整体架构.txt2009-03-22 11:30发IT柏拉图第2天的讲课内容第二天培训小结2008年7月10日 星期四DEDECMS系统的整体架构1 系统入口程序通过执行根目录下的index.php文件来加载整个应用程序。/include/inc_arcpart_view.php是程序的核心文件/include/config_base.php是程序全局配置以及数据库系统配置文件对于config_base.php文件主要包括了安全检测,数据库配置,函数库调用,和站点的全局配置信息。/inc_functions.php是系统的通用函数库/include/inc_arcpart_view.php是用于解析和创建全局性质的模板,以生成各个页面的显示信息,如频道页,列表页等。2 数据库类的使用在系统入口文件中,引入了 config_base.php 前如果没设置 $_ONLYCONFIG 变量,系统会自动载入 pub_db_mysql.php 文件,并用$dsql = new DedeSql(false);进行初始化数据库连接,因此在工程所有文件中均不需要单独初始化这个类,可直接用 $dsql 进行操作,并且在进行完指定操作后不要关闭数据库连接,在页面最底下调用 ClearAllLink(); 函数即可。对于数据库类常用的方法如下:1、执行一个非select类型的SQL语句,如 insert 、create 、update 等,只需要按照下列模型编写程序,返回操作状态:$rs = $dsql-ExecuteNoneQuery($sql);返回信息给$rs变量的是一个BOOL型信息,表示时候操作成功!2、执行一个非查询类型的SQL语句,并返回成功记录数$rs = $dsql-ExecuteNoneQuery2($sql);这里返回信息给$rs变量的是一个int数据,这里表示对数据库的影响行数。3、对于select类型返回单个记录$arr = $dsql-GetOne($sql);4、执行条件查询语句$dsql-SetQuery($dsql);$dsql-Execute();while($arr = $dsql-GetArray()可以简化为:$dsql-Execute(me,$dsql);while($arr = $dsql-GetArray()me 为记录集游标,用于区分不同的查询,如:$dsql-Execute(me,$dsql);while($arr = $dsql-GetArray()$dsql-Execute(2,$dsql2);while($arr2 = $dsql-GetArray()这里查询进行了二重SQL嵌套,因此必须进行游标区分,否则数据库将无法识别查询信息。$dsql-GetArray($rsid,$acctype) 参数$rsid=me$acctype=MYSQL_ASSOC在查询游标中读取数据还可以用$dsql-GetObject($rsid=me);返回的结果是用类结构表示的值。其余的一些获取数据库相关信息的方法:5、获取上一个插入的自动递增主键id值$dsql-GetLastID();6、获得查询的总记录数$dsql-GetTotalRow($rsid=me)7、获得MySql的版本号$dsql-GetVersion($isformat=true)8、释放某查询的资源$dsql-FreeResult($rsid=me);9、在数据库中是否存在某数据表$dsql-IsTable($tbname)10、重新选择要操作的数据库$dsql-SelectDB($dsqlname);11、获得数据库连接标识$dsql-linked3 PHP编码规范常量定义:常量统一使用 大写字母,如 DEDEROOT在没有进行输出的逻辑文件中(如纯函数、纯类文件中),开头必须使用if(!defined(DEDEINC)exit(Request Error!);防止直接从网址访问该文件导致出现错误提示信息。系统默认定义的常量:DEDEINC 表示 dedecms 系统的 include 目录物理路径DEDEROOT 表示 dedecms 系统安装目录物理路径以上两个常量在config_base.php 中定义对于dede的后台来说,在管理目录config.php中定义了 DEDEADMIN 常量,表示管理目录,在管理目录的程序中,先引入 require_once(dirname(_FILE_).”/config_base.php”); 在后面需引入的其它后台程序管理专用文件,应该用require_once(DEDEADMIN.”/inc/文件.php”); 引入。变量定义:1 普通变量 小写字母开头,多词组合的分隔处用大写,如 $myVar2 Request 变量,_GET、_POST、_COOKIE变量,变量定义统一用小写(即是表单的name必须小写),有多个词组合的组合处不区分,如 $myaddress;3 系统配置变量,固定使用 $cfg_ 开头,后面词组统一用小写,如 $cfg_admin_mail,系统配置变量增加/修改通常直接在管理后台中进行操作;(注:一些系统惯用 $cfg、$config 之类数组表示配置变量,不过如果在函数或类中使用里面的这种变量,引入时就必须把整个数组引入,所以放弃了这种做法。)4 特殊声明变量 使用下划线开头全大写,中间间隔也使用_,如 $_ONLYDB;5 数据表名称和字段名称统一使用小写;6 页面控制类的类名及类成员统一使用小写;函数,类声明,类成员函数定义用大写字母开头,多词组合的分隔处用大写,如 DedeSql, Html2Text,GetIP,较短函数的参数变量定义标准可不限,较长函数内的变量定义仍需遵守变量定义标准;类的成员变量则按普通变量的标准,小写字母开头,多词组合的分隔处用大写。文件命名规范本系统的文件名统一用小写,带间隔的用 “_“ 或 “.” 分开,如 pub_db_mysql.php系统专用的类或函数文件命名用 inc_ 开头通用的类或函数文件用 pub_ 开头其它相应该的模块文件则以此模块名称则为开头,中间用下划线分隔,如: catalog_main.php catalog_add.php 等调用第三方文件则保留原文件的命名。其它注意事项(1) 系统默认就打开了数据库存连接,为了防止出错,不需要在中途关闭,由PHP自动管理;(2) 数据库类的使用统一使用变量 $dsql 或 $db ,因为调用数据库类时就默认用$dsql = $db = new DedeSql(false); 来对数据库类进行了初始化。PHP MySQL 常量在 PHP 4.3.0 以后的版本中,允许在 mysql_connect() 函数和 mysql_pconnect() 函数中指定更多的客户端标记:PHP:指示支持该常量的最早的 PHP 版本。常量描述PHPMYSQL_CLIENT_COMPRESS使用压缩的通讯协议。4.3MYSQL_CLIENT_IGNORE_SPACE允许在函数名后留空格位。4.3MYSQL_CLIENT_INTERACTIVE在关闭连接前所允许的交互超时非活动时间。4.3MYSQL_CLIENT_SSL使用 SSL 加密(仅在 MySQL 客户端库版本为 4+ 时可用)。4.3mysql_fetch_array() 函数使用一个常量来表示所返回数组的类型:常量描述PHPMYSQL_ASSOC返回的数据列使用字段名作为数组的索引名。MYSQL_BOTH返回的数据列使用字段名及数字索引作为数组的索引名。MYSQL_NUM返回的数据列使用数字索引作为数组的索引名。索引从 0 开始,表示返回结果的第一个字段。PHP:指示支持该函数的最早的 PHP 版本。函数描述PHPmysql_affected_rows()取得前一次 MySQL 操作所影响的记录行数。3mysql_change_user()不赞成。改变活动连接中登录的用户3mysql_client_encoding()返回当前连接的字符集的名称4mysql_close()关闭非持久的 MySQL 连接。3mysql_connect()打开非持久的 MySQL 连接。3mysql_create_db()不赞成。新建 MySQL 数据库。使用 mysql_query() 代替。3mysql_data_seek()移动记录指针。3mysql_db_name()从对 mysql_list_dbs() 的调用返回数据库名称。3mysql_db_query()不赞成。发送一条 MySQL 查询。使用 mysql_select_db() 和 mysql_query() 代替。3mysql_drop_db()不赞成。丢弃(删除)一个 MySQL 数据库。使用 mysql_query() 代替。3mysql_errno()返回上一个 MySQL 操作中的错误信息的数字编码。3mysql_error()返回上一个 MySQL 操作产生的文本错误信息。3mysql_escape_string()不赞成。转义一个字符串用于 mysql_query。使用 mysql_real_escape_string() 代替。4mysql_fetch_array()从结果集中取得一行作为关联数组,或数字数组,或二者兼有。3mysql_fetch_assoc()从结果集中取得一行作为关联数组。4mysql_fetch_field()从结果集中取得列信息并作为对象返回。3mysql_fetch_lengths()取得结果集中每个字段的内容的长度。3mysql_fetch_obj

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论