`

[原创]简单快速有趣的MySQL数据库操作类:SimpleDB

 
阅读更多

自己写着玩的,代码没有测试,不过觉得思路不错,如果能够加上部分异常处理的功能,应该比较帅了,支持PHP4/PHP5,恩,虽然没有ADOdb或者PEAR::DB强,不错一般应用应该不错,恩。

喜欢的就自己拿去用吧,自己随便改,呵呵,也欢迎提意见。(注释遵循PHPDoc的标准,便于生成手册)

注意:代码未经测试,出现问题可要自己负责哇,呵呵。

<?
//==========================================
//文件:SimpleDB.class.php
//程序:MySQL数据库操作类
//作者:heiyeluren<http://blog.csdn.net/heiyeshuwu
//时间:2006-09-20
//==========================================


classSimpleDB
{
/**
*连接标识
*@varresource
*/
var$dbLink;
/**
*数据库查询语句
*@varstring
*/
var$dbSql;
/**
*查询结果
*@varresource
*/
var$dbResult;
/**
*查询记录集
*@vararray
*/
var$dbRecord;
/**
*数据库字符集
*@varstring
*/
var$dbCharset='GBK';
/**
*数据库结果集提取方式
*@varint
*/
var$fetchMode=MYSQL_ASSOC;
/**
*日志保存路径
*@varstring
*/
var$logPath='/tmp/mysql_log';

/**
*是否记录SQL查询失败的SQL日志,缺省是false
*@varbool
*/
var$isLog=false;
/**
*是否在SQL查询出错的时候显示错误并且终止脚本执行,缺省是true
*
*@varbool
*/
var$isError=true;


//--------------------------
//内部接口
//--------------------------

/**
*构造函数
*
*@paramstring$db_host连接主机
*@paramstring$db_user连接用户
*@paramstring$db_passwd数据库密码
*@paramstring$db_name数据库
*@parambool$is_pconnect是否长连接,默认是否
*@returnSimpleDB
*/
functionSimpleDB($db_host,$db_user,$db_passwd,$db_name,$is_pconnect=false){
$this->connect($db_host,$db_user,$db_passwd,$db_name,$is_pconnect);
}

/**
*连接数据库
*
*@paramstring$db_host数据库主机地址,例如:localhost,或者localhost:3306
*@paramstring$db_user连接数据库的用户
*@paramstring$db_passwd用户密码
*@paramstring$db_name数据库名字
*@paramboo$is_pconnect是否使用长连接
*@returnresource返回连接资源标识符
*/
functionconnect($db_host,$db_user,$db_passwd,$db_name,$is_pconnect){
if($is_pconnect){
return$this->dbLink=@mysql_pconnect($db_host,$db_user,$db_passwd);
}
$this->dbLink=@mysql_connect($db_host,$db_user,$db_passwd);
@
mysql_select_db($db_name,$this->dbLink);
$mysql_version=$this->getOne("SELECTVERSION()");
if($this->dbCharset!=''&&preg_match("/^(5.|4.1)/",$mysql_version)){
$this->query("SETNAMES'$this->dbCharset'",$this->dbLink);
}
return$this->dbLink;
}

/**
*关闭数据库连接
*
*@returnbool是否成功关闭连接
*/
functiondisconnect(){
$ret=@mysql_close($this->dbLink);
$this->dbLink=null;
return$ret;
}

/**
*设置查询结果返回数据类型
*
*@paramint$modeType设置查询结果返回设置,1为关联索引和数字所有都有,2为使用关联索引,3为使用数字索引
*/
functionsetFetchMode($modeType){
switch($modeType){
case1://数字索引和关联索引都有
$this->fetchMode=MYSQL_BOTH;
break;
case2://使用关联索引
$this->fetchMode=MYSQL_ASSOC;
break;
case3://使用数字索引
$this->fetchMode=MYSQL_NUM;
break;
default://缺省使用关联索引
$this->fetchMode=MYSQL_ASSOC;
}
}

/**
*设置数据库客户端提取结果集的字符编码
*
*@paramstring$charset编码的字符串,比如UTF8,GBK之类的,缺省是GBK
*/
functionsetCharset($charset){
if($charset!=''){
$this->dbCharset=$charset;
}
}

/**
*设置日志存储路径
*
*@paramstring$log_path日志路径,该必须是可写的
*/
functionsetLogPath($log_path){
if($log_path!=''){
$this->logPath=$log_path;
}
}

/**
*写SQL执行日志
*
*@paramstring$sql查询的SQL语句
*@paramstring$file当前执行查询的文件
*/
functionwriteLog($sql,$file){
if(!file_exists($this->logPath)){
@
mkdir($this->logPath);
}
$log_file=$this->logPath."/mysql_".date("Y-m-d").".log";
$log_msg="[".date("Y-m-dH:i:s")."]-".$file.":".$sql." ";
error_log($log_msg,3,$log_file);
}

/**
*显示上依次SQL执行错误的错误信息
*/
functionshowError(){
$errMessage="MySQLqueryerror".mysql_errno($this->dbLink).":".mysql_error($this->dbLink);
die($errMessage);
}

/**
*返回MySQL的版本信息
*
*@returnstringMysql的版本
*/
functiongetVersion(){
return$this->getOne("SELECTVERSION()");
}

/**
*查询操作的底层接口
*
*@paramstring$sql要执行查询的SQL语句
*@returnbool执行成功返回true,失败返回false
*/
functionquery($sql){
$this->dbSql=$sql;
$this->dbResult=null;
$this->dbResult=@mysql_query($sql,$this->dbLink);
if($this->dbResult===false){
if($this->isLog){
$this->writeLog($sql,__FILE__);
}
if($this->isError){
$this->showError();
}
returnfalse;
}
returntrue;
}


//--------------------------
//数据获取接口
//--------------------------

/**
*获取SQL执行的全部结果集(二维数组)
*
*@paramstring$sql需要执行查询的SQL语句
*@return成功返回查询结果的二维数组,失败返回false
*/
functiongetAll($sql){
if(!$this->query($sql)){
returnfalse;
}
$this->dbRecord=array();
while($row=@mysql_fetch_array($this->dbResult,$this->fetchMode)){
$this->dbRecord[]=$row;
}
@
mysql_free_result($this->dbResult);
if(!is_array($this->dbRecord)||empty($this->dbRecord)){
returnfalse;
}
return$this->dbRecord;
}

/**
*获取单行记录(一维数组)
*
*@paramstring$sql需要执行查询的SQL语句
*@return成功返回结果记录的一维数组,失败返回false
*/
functiongetRow($sql){
if(!$this->query($sql)){
returnfalse;
}
$this->dbRecord=array();
$this->dbRecord=@mysql_fetch_array($this->dbResult,$this->fetchMode);
@
mysql_free_result($this->dbResult);
if(!is_array($this->dbRecord)||empty($this->dbRecord)){
returnfalse;
}
return$this->dbRecord;
}

/**
*获取一列数据(一维数组)
*
*@paramstring$sql需要获取的字符串
*@paramstring$field需要获取的列,如果不指定,默认是第一列
*@return成功返回提取的结果记录的一维数组,失败返回false
*/
functiongetCol($sql,$field=''){
if(!$this->query($sql)){
returnfalse;
}
$this->dbRecord=array();
while($row=@mysql_fetch_array($this->dbResult,$this->fetchMode)){
if(trim($field)==''){
$this->dbRecord[]=current($row);
}
else{
$this->dbRecord[]=$row[$field];
}
}
@
mysql_free_result($this->dbResult);
if(!is_array($this->dbRecord)||empty($this->dbRecord)){
returnfalse;
}
return$this->dbRecord;
}

/**
*获取一个数据(当条数组)
*
*@paramstring$sql需要执行查询的SQL
*@return成功返回获取的一个数据,失败返回false
*/
functiongetOne($sql,$field=''){
if(!$this->query($sql)){
returnfalse;
}
$this->dbRecord=array();
$row=@mysql_fetch_array($this->dbResult,$this->fetchMode);
@
mysql_free_result($this->dbResult);
if(!is_array($row)||empty($row)){
returnfalse;
}
if(trim($field)!=''){
$this->dbRecord=$row[$field];
}
else{
$this->dbRecord=current($row);
}
return$this->dbRecord;
}

/**
*获取指定各种条件的记录
*
*@paramstring$table表名(访问的数据表)
*@paramstring$field字段(要获取的字段)
*@paramstring$where条件(获取记录的条件语句,不包括WHERE,默认为空)
*@paramstring$order排序(按照什么字段排序,不包括ORDERBY,默认为空)
*@paramstring$limit限制记录(需要提取多少记录,不包括LIMIT,默认为空)
*@parambool$single是否只是取单条记录(是调用getRow还是getAll,默认是false,即调用getAll)
*@return成功返回记录结果集的数组,失败返回false
*/
functiongetRecord($table,$field='*',$where='',$order='',$limit='',$single=false){
$sql="SELECT$fieldFROM$table";
$sql.=trim($where)!=''?"WHERE$where":$where;
$sql.=trim($order)!=''?"ORDERBY$order":$order;
$sql.=trim($limit)!=''?"LIMIT$limit":$limit;
if($single){
return$this->getRow($sql);
}
return$this->getAll($sql);
}

/**
*获取指点各种条件的记录(跟getRecored类似)
*
*@paramstring$table表名(访问的数据表)
*@paramstring$field字段(要获取的字段)
*@paramstring$where条件(获取记录的条件语句,不包括WHERE,默认为空)
*@paramarray$order_arr排序数组(格式类似于:array('id'=>true),那么就是按照ID为顺序排序,array('id'=>false),就是按照ID逆序排序)
*@paramarray$limit_arr提取数据的限制数组()
*@returnunknown
*/
functiongetSpecifyRecord($table,$field='*',$where='',$order_arr=array(),$limit_arr=array()){
$sql="SELECT$fieldFROM$table";
$sql.=trim($where)!=''?"WHERE$where":$where;
if(is_array($order_arr)&&!empty($order_arr)){
$arr_key=key($order_arr);
$sql.="ORDERBY$arr_key".($order_arr[$arr_key]?"ASC":"DESC");
}
if(is_array($limit_arr)&&!empty($limit_arr)){
$start_post=intval(array_shift($limit_arr));
$offset=intval(array_shift($limit_arr));
$sql.="LIMIT$start_post,$offset";
}
return$this->getAll($sql);
}

/**
*获取指定条数的记录
*
*@paramstring$table表名
*@paramint$start_pos开始记录
*@paramint$offset偏移量
*@paramstring$field字段名
*@paramstring$where条件(获取记录的条件语句,不包括WHERE,默认为空)
*@paramstring$order排序(按照什么字段排序,不包括ORDERBY,默认为空)
*@return成功返回包含记录的二维数组,失败返回false
*/
functiongetLimitRecord($table,$start_pos,$offset,$field='*',$where='',$oder=''){
$sql="SELECT$fieldFROM$table";
$sql.=trim($where)!=''?"WHERE$where":$where;
$sql.=trim($order)!=''?"ORDERBY$order":$order;
$sql.="LIMIT$start_pos,$offset";
return$this->getAll($sql);
}

/**
*获取排序记录
*
*@paramstring$table表名
*@paramstring$order_field需要排序的字段(比如id)
*@paramstring$order_method排序的方式(1为顺序,2为逆序,默认是1)
*@paramstring$field需要提取的字段(默认是*,就是所有字段)
*@paramstring$where条件(获取记录的条件语句,不包括WHERE,默认为空)
*@paramstring$limit限制记录(需要提取多少记录,不包括LIMIT,默认为空)
*@return成功返回记录的二维数组,失败返回false
*/
functiongetOrderRecord($table,$order_field,$order_method=1,$field='*',$where='',$limit=''){
//$order_method的值为1则为顺序,$order_method值为2则2则是逆序排列
$sql="SELECT$fieldFROM$table";
$sql.=trim($where)!=''?"WHERE$where":$where;
$sql.="ORDERBY$order_field".($order_method==1?"ASC":"DESC");
$sql.=trim($limit)!=''?"LIMIT$limit":$limit;
return$this->getAll($sql);
}

/**
*分页查询(限制查询的记录条数)
*
*@paramstring$sql需要查询的SQL语句
*@paramint$start_pos开始记录的条数
*@paramint$offset每次的偏移量,需要获取多少条
*@return成功返回获取结果记录的二维数组,失败返回false
*/
functionlimitQuery($sql,$start_pos,$offset){
$start_pos=intval($start_pos);
$offset=intval($offset);
$sql=$sql."LIMIT$start_pos,$offset";
return$this->getAll($sql);
}


//--------------------------
//无数据返回操作
//--------------------------

/**
*执行执行非Select查询操作
*
*@paramstring$sql查询SQL语句
*@returnbool成功执行返回true,失败返回false
*/
functionexecute($sql){
if(!$this->query($sql)){
returnfalse;
}
$count=@mysql_affected_rows($this->dbLink);
if($count<=0){
returnfalse;
}
returntrue;
}

/**
*自动执行操作(针对Insert/Update操作)
*
*@paramstring$table表名
*@paramarray$field_array字段数组(数组中的键相当于字段名,数组值相当于值,类似array('id'=>100,'user'=>'heiyeluren')
*@paramint$mode执行操作的模式(是插入还是更新操作,1是插入操作Insert,2是更新操作Update)
*@paramstring$where如果是更新操作,可以添加WHERE的条件
*@returnbool执行成功返回true,失败返回false
*/
functionautoExecute($table,$field_array,$mode,$where=''){
if($table==''||!is_array($field_array)||empty($field_array)){
returnfalse;
}
//$mode为1是插入操作(Insert),$mode为2是更新操作
if($mode==1){
$sql="INSERTINTO$tableSET";
}
else{
$sql="UPDATE$tableSET";
}
foreach($field_arrayas$key=>$value){
$sql.="$key='$value',";
}
$sql=rtrim($sql,',');
if($mode==2&&$where!=''){
$sql.="WHERE$where";
}
return$this->execute($sql);
}


//--------------------------
//其他数据相关操作
//--------------------------

/**
*获取最后一次查询的SQL语句
*
*@returnstring返回最后一次查询的SQL语句
*/
functiongetLastSql(){
return$this->dbSql;
}

/**
*获取上次插入操作的的ID
*
*@returnint如果没有连接或者查询失败,返回0,成功返回ID
*/
functiongetLastId(){
if(!$this->dbLink){
return0;
}
if(($last_id=mysql_insert_id($this->dbLink))>0){
return$last_id;
}
return$this->getOne("SELECTLAST_INSERT_ID()");
}

/**
*获取记录集里面的记录条数(用于Select操作)
*
*@returnint如果上一次无结果集或者记录结果集为空,返回0,否则返回结果集数量
*/
functiongetNumRows(){
if(!$this->dbResult){
return0;
}
returnmysql_num_rows($this->dbResult);
}

/**
*获取受到影响的记录数量(用于Update/Delete/Insert操作)
*
*@returnint如果没有连接或者影响记录为空,否则返回影响的行数量
*/
functiongetAffectedRows(){
if(!$this->dbLink){
return0;
}
returnmysql_affected_rows($this->dbLink);
}
}
?>

分享到:
评论

相关推荐

    一个MySQL数据库操作类,支持连贯操作,查询结果自动进行缓存管理

    今天刚做的一个MySQL操作类,基本功能已经完成,支持连贯操作,支持基本的增改删差,查询条件和数据插入支持数组方式。自动缓存管理,可以选择文件缓存,或者memcache(也可以很方便的扩展其他缓存方式)。 使用...

    QT的mysql数据库操作类

    (1)在需要调用mysql操作类的窗口头文件*.h中引入mysql头文件:#include "mysql.h" (2)在需要调用mysql操作类的窗口头文件*.h中声明mysql对象指针: public: mysql *db; (3)在需要调用mysql操作类的窗口...

    C# 操作MySQL数据库类

    C# 操作MySQL数据库类 非存储过程操作类,如果要用到存储过程的话,自已修改里面的代码,里面的存储过程被我注释了。 至于调用方法,应该不用我说下载者应该也懂得吧,如果是对C#一巧不通的初学者,不懂也不要怪我...

    c#操作MySQL数据库封装类

    这个"c#操作MySQL数据库封装类"很可能是为了简化数据库交互,提供一个易于使用的接口,以提高代码的可读性和可维护性。下面我们将详细讨论如何在C#中封装MySQL数据库操作类以及涉及的关键知识点。 1. **数据库连接*...

    php实现PDO的mysql数据库操作类.zip

    dbtemplate类集合了对数据库的访问操作,主要有以下几个操作: 1. queryrows:返回多行记录 2. queryrow:返回为单条记录 3. queryforint:查询单字段,返回整数 4. queryforfloat:查询单字段,...

    数据库操作类:一个数据库管理工具类库,单文件,非常好用支持mysql,sqlite.zip

    Adminer是一个轻量级、单一文件的数据库管理工具,它为开发者提供了便捷的方式来管理和操作MySQL和SQLite数据库。这个压缩包提供了一个实用的数据库管理类库,适用于那些不希望或者无法安装更复杂的工具,如...

    php操作mysql数据库操作类

    php操作mysql数据库操作类,包括数据库连接及操作

    Mysql封装类 php 数据库 操作类 db 数据库

    为了简化数据库操作,开发者通常会创建一个数据库封装类,以提高代码的可读性和复用性。本文将详细介绍“Mysql封装类”在PHP中的应用,以及如何使用此类进行数据库操作。 首先,`class_mysql.php`是这个封装类的...

    简单JAVA写的mysql数据库帮助类与测试示例

    在这个"简单JAVA写的mysql数据库帮助类与测试示例"中,我们有两个核心文件:`MySqlConn - 副本.java`和`TestMySqlConn - 副本.java`。 首先,让我们了解`MySqlConn - 副本.java`,这通常是一个数据库连接帮助类,它...

    国家开放大学 MySQL数据库应用 实验训练4:数据库系统维护

    MySQL 数据库应用实验训练 4:数据库系统维护 本实验训练旨在帮助学生理解视图和索引的概念和作用,掌握视图和索引的基本操作,并且了解它们在数据库系统维护中的应用。 一、视图的概念和作用 视图是一种基于基表...

    一个PHP对MySql数据库操作类

    获取数据库服务器信息,当前数据库所有表名及视图名 将查询结果转为数组、数据集及JSON,将数组转为JSON 返回自动编号的值,无处理返回数据 查询某个表数据行数或某个表指定条件的行数 分页功能

    MySQL数据库生成C#实体类工具

    ### MySQL数据库生成C#实体类工具 在软件开发过程中,特别是在使用关系型数据库进行数据持久化操作时,实体类的创建是一项重复性高且容易出错的工作。为了解决这一问题,提高开发效率,出现了一些自动生成实体类的...

    MySQL数据库操作MFC封装类

    总的来说,这个MFC封装类提供了一个用户友好的接口,使得C++开发者在MySQL数据库上进行CRUD操作(创建、读取、更新、删除)更加简单。通过事务处理和回滚功能,可以确保数据一致性,特别是在需要执行一系列相互依赖...

    C#数据库操作类AccessHelper实例

    AccessHelper类这样的工具对于快速开发和简化数据库操作的代码很有帮助,特别是在小型项目或学习环境中。它可以减少重复的数据库连接和关闭代码,使得代码更整洁,同时提高开发效率。 综上所述,AccessHelper是C#...

    mysql数据库备份还原类.rar

    MySQL数据库是世界上最流行的开源关系型数据库管理系统之一,用于存储和管理数据。在日常运维中,数据库备份和还原是至关重要的环节,确保数据的安全性和可恢复性。本压缩包"mysql数据库备份还原类.rar"提供了两个...

    mysql数据库英文文献.pdf

    MySQL数据库架构与历史 MySQL数据库架构的理解需要结合其历史背景来讨论,因此这两方面将在同一章节中进行讨论。 MySQL数据库的历史可以追溯到1979年,当时Monty Widenius在一家小公司TcX工作,创建了一款报告...

    C#SQL 数据库操作类代码

    C# SQL 数据库操作类代码 C# SQL 数据库操作类是指通过C#语言编写的数据库操作类,可以直接连接SQL数据库...C# SQL 数据库操作类代码提供了一种简单、灵活的方式来访问和操作SQL数据库,能够满足各种数据库操作需求。

    mysql数据库基础全部课件

    本课件"mysql数据库基础全部课件"旨在为初学者提供一个全面且实用的学习资源,帮助大家快速掌握MySQL的基础知识。 一、MySQL概述 1. MySQL的起源与发展:了解MySQL的诞生背景,发展历程以及其在当前互联网环境中的...

    php链接mysql数据库类

    此PHP类提供了一种封装良好的方式来管理与MySQL数据库的交互,通过定义一系列方法来简化数据库操作,如连接数据库、执行SQL语句、错误处理等。开发者可以通过实例化此类并调用相应的方法轻松地完成数据库相关的工作...

    flask 框架操作MySQL数据库简单示例

    本示例将介绍如何在Flask框架中操作MySQL数据库,包括数据库连接、表格创建、数据的增删改查等基本操作。 首先,要进行数据库的连接,需要导入pymysql模块。pymysql是Python中用于连接MySQL数据库的库。以下是一个...

Global site tag (gtag.js) - Google Analytics