设为首页 收藏本站
查看: 489|回复: 0

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

[复制链接]

尚未签到

发表于 2016-10-19 10:18:39 | 显示全部楼层 |阅读模式
  自己写着玩的,代码没有测试,不过觉得思路不错,如果能够加上部分异常处理的功能,应该比较帅了,支持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</sp

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-288347-1-1.html 上篇帖子: 实习总结(一)---数据库(mysql)的安装、Myeclipse与数据库的链接测试 下篇帖子: MySQL CLUSTER(集群)系列 (2.另类在线增加节点-online hotplugin)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表