关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » MySQL »MYSQL的操作类(已封装)

    MYSQL的操作类(已封装)

    2015-08-21 00:00:00 出处:ITJS
    分享

    class MySQLDB

    {

    //MYSQL数据库操作类

    //作者:熊毅

    //版本:2.0(发行版)

    //可以自由转载,修改请通知我scxy78@yeah.net

    //转载请保留以上声明

    //使用说明:

    //该类完全按照ADO的习惯书写的,用过ASP的人都觉得ASP连接数据库比PHP好用(这是我的感觉),

    //但PHP得一个一个API地写,挺累,该类做了完全的封装

    //创建类的实例时可以指定一个数据库表和选择的数据库,如:new MySQLDB("table","database");

    //查询数据时Query后可以用GetValue得到相应的值,既可以是字段名也可以是已0开始的序号

    //插入新值,先用AddNew后使用SetValue相应的字段名或序号和字段值,在用Update添加

    //编辑时用Edit指定编辑记录的条件在使用SetValue,最后用Update添加

    //在类使用过程中,sTName记录上次使用的数据库表名,当指定后可以直接使用,以后的操作默认在该表

    //上进行操作,当然也可以每次指定特殊的表进行操作

    //nErr指示是否操作出错,sErr记录最后一次出错的错误代码,记录了明确的有哪个函数引起的错误

    //错误之处请指正

    //欢迎来信与我交流编程经验:scxy78@yeah.net

    //我的CSDN:用户号:scxy;呢称:小熊,请多关照

    //可以自由转载,修改请通知我scxy78@yeah.net

    //转载请保留以上声明

    var $host="localhost"; //主机名

    var $user="boot"; //用户名

    var $password="oaserver"; //用户密码

    var $linkid; //连接值

    var $dbid; //数据库选择的结果值

    var $sTName; //指定当前操作的数据库表

    var $sErr; //错误代码

    var $nErr; //指示是否有错误存在,0无错误,1有错误

    var $nResult; //查询结果值

    var $aFName; //保存FieldsName的数组

    var $nRows; //查询结果中的行数

    var $nCols; //查询结果中的列数

    var $aNew; //添加在AddNew函数后的数据,以数组形式保存

    var $NewEdit; //判断当前是否在进行添加操作,0表示没有,1表示在进行添加,2表示编辑

    var $sEditCon; //指定编辑记录的条件

    var $nOffset; //记录偏移量

    var $EOF; //标记是否到记录集尾

    var $sSQL; //最后一条执行的SQL语句

    //执行Update所要用到的全局变量

    var $sName; //字段名

    var $sValue; //字段值AddNew时用

    var $sEdit; //字段值Edit时用

    function Initialize()

    {

    $this->nErr=0;

    $this->NewEdit=0;

    $this->nResult=-1;

    $this->nCols=0;

    $this->nRows=0;

    $this->nOffset=0;

    $this->EOF=true;

    $this->sName="";

    $this->sValue="#@!";

    $this->sEdit="#@!";

    unset($this->aFName);

    unset($this->aNew);

    }

    function MySqlDB($TableName="",$database="slt") //构造函数

    {

    $this->Initialize();

    $this->sTName=$TableName;

    $this->linkid=mysql_connect($host,$user,$password);

    if(!$this->linkid)

    {

    $this->nErr=1;

    $this->sErr="MySqlDB:数据库连接出错,请启动服务!";

    return;

    }

    $this->dbid=mysql_select_db($database);

    if(!$this->dbid)

    {

    $this->nErr=1;

    $this->sErr="MySqlDB:选择的数据库".$database."不存在!";

    return;

    }

    }

    function IsEmpty($Value)

    {

    if(is_string($Value)&&empty($Value))

    return true;

    return false;

    }

    function Destroy() //数据清除处理

    {

    mysql_query("commit");

    mysql_close();

    }

    function PrintErr()

    {

    if($this->nErr==1)

    {

    echo($this->sErr."

    ");

    }

    else

    {

    echo("没有错误

    ");

    }

    }

    function Execute($SQL) //直接执行SQL语句

    {

    if(empty($SQL))

    {

    $this->nErr=1;

    $this->sErr="Execute:执行语句不能为空!";

    return false;

    }

    $this->sSQL=$SQL;

    if(!mysql_query($SQL))

    {

    $this->nErr=1;

    $this->sErr="Execute:SQL语句:".$SQL."

    MySql错误:".mysql_error();

    return false;

    }

    return true;

    }

    function Query($TableName="",$SQL="*",$Condition="",$Order="",$Sequenc="") //在数据库里执行查询

    {

    $this->Initialize();

    if(!empty($TableName))

    $this->sTName=$TableName;

    $strSQL="select ".$SQL." from ".$this->sTName;

    if(!empty($Condition))

    $strSQL=$strSQL." where ".$Condition;

    if(!empty($Order))

    $strSQL=$strSQL." order by ".$Order;

    if(!empty($Sequenc))

    $strSQL=$strSQL." ".$Sequenc;

    $this->sSQL=$strSQL;

    if(!$this->nResult=mysql_query($strSQL))

    {

    $this->nErr=1;

    $this->sErr="Query:SQL语句:".$strSQL."

    MySql错误:".mysql_error()."

    ";

    return;

    }

    $this->nOffset=0;

    $this->nRows=mysql_num_rows($this->nResult);

    $this->nCols=mysql_num_fields($this->nResult);

    if($this->nRows>0)

    $this->EOF=false;

    else

    $this->EOF=true;

    unset($this->aFName);

    $this->aFName=array();

    for($i=0;$i<$this->nCols;$i++)

    $this->aFName[$i]=strtolower(mysql_field_name($this->nResult,$i));

    }

    function MoveNext()

    {

    if($this->EOF)

    {

    $this->nErr=1;

    $this->sErr="MoveNext:已经移到记录集末尾!";

    return;

    }

    $this->nOffset++;

    if($this->nOffset>=$this->nRows)

    $this->EOF=true;

    }

    function MoveTo($Offset)

    {

    if(empty($Offset))

    {

    $this->nErr=1;

    $this->sErr="MoveTo:必须指定偏移量! ";

    return;

    }

    if(!$this->nResult)

    {

    $this->nErr=1;

    $this->sErr="MoveTo:请先执行查询:Query";

    return;

    }

    $this->nOffset=$Offset;

    }

    //得到指定行的指定列的值,返回字符串

    //如果不指定Offset将取得下一行的值

    //如果不指定nFields将取得该行的值,并已数组形式返回

    function GetValue($nFields=-1,$Offset=-1)

    {

    if($this->nResult==-1)

    {

    $this->nErr=1;

    $this->sErr="GetValue:请先执行Query()函数!";

    return;

    }

    if($Offset>-1)

    {

    $this->nOffset=$Offset;

    if($this->nOffset>=$this->nRows)

    {

    $this->nErr=1;

    $this->sErr="GetValue:所要求的偏移量太大,无法达到!";

    return;

    }

    }

    if(!@mysql_data_seek($this->nResult,$this->nOffset))

    {

    $this->nErr=1;

    $this->sErr="GetValue:请求不存在的记录!";

    return;

    }

    $aResult=mysql_fetch_row($this->nResult);

    if(is_int($nFields)&&$nFields>-1)

    {

    if($nFileds>$this->nCols)

    {

    $this->nErr=1;

    $this->sErr="GetValue:所请求的列值大于实际的列值!";

    return;

    }

    return $aResult[$nFields];

    }

    if(is_string($nFields))

    {

    $nFields=strtolower($nFields);

    for($i=0;$i<$this->nCols;$i++)

    {

    if($this->aFName[$i]==$nFields)

    break;

    }

    if($i==$this->nCols)

    {

    $this->nErr=1;

    $this->sErr="GetValue:所请求的列不存在,请仔细检查!";

    return;

    }

    return $aResult[$i];

    }

    return $aResult;

    }

    function AddNew($TableName="") //标志开始添加数据

    {

    $this->Initialize();

    if(!empty($TableName))

    $this->sTName=$TableName;

    if($this->NewEdit>0)

    {

    $this->nErr=1;

    $this->sErr="AddNew:你正在对数据库进行添加或更新操作!";

    return;

    }

    if(empty($this->sTName))

    {

    $this->nErr=1;

    $this->sErr="AddNew:想要添加的数据库表为空,可以在构造时指定,也可在AddNew()时指定!";

    return;

    }

    unset($this->aNew);

    $this->aNew=array();

    $this->NewEdit=1;

    $strSQL="select * from ".$this->sTName;

    $this->sSQL=$strSQL;

    if(!$this->nResult=mysql_query($strSQL))

    {

    $this->nErr=1;

    $this->sErr="AddNew:SQL语句:".strSQL."

    MySql错误:".mysql_error();

    return;

    }

    $this->nCols=mysql_num_fields($this->nResult);

    unset($this->aFName);

    $this->aFName=array();

    for($i=0;$i<$this->nCols;$i++)

    $this->aFName[$i]=strtolower(mysql_field_name($this->nResult,$i));

    }

    function Edit($Condition="",$TableName="") //对指定数据库表进行编辑

    {

    $this->Initialize();

    if(!empty($TableName))

    $this->sTName=$TableName;

    $this->sEditCon=$Condition;

    if(empty($this->sTName))

    {

    $this->nErr=1;

    $this->sErr="Edit:在编辑前请先指定数据库表!";

    return;

    }

    unset($this->aNew);

    $this->aNew=array();

    $this->NewEdit=2;

    $strSQL="select * from ".$this->sTName;

    $this->sSQL=$strSQL;

    if(!$this->nResult=mysql_query($strSQL))

    {

    $this->nErr=1;

    $this->sErr="Edit:SQL语句:".strSQL."

    MySql错误:".mysql_error();

    return;

    }

    $this->nCols=mysql_num_fields($this->nResult);

    unset($this->aFName);

    $this->aFName=array();

    for($i=0;$i<$this->nCols;$i++)

    $this->aFName[$i]=strtolower(mysql_field_name($this->nResult,$i));

    }

    function SetValue($Index,$Value) //指定数据,跟在AddNew后执行;

    {

    if($this->NewEdit==0)

    {

    $this->nErr=1;

    $this->sErr="SetValue:请先执行AddNew()或者Edit()!";

    return;

    }

    if(is_int($Index))

    {

    if($Index<0||$Index>$this->nCols)

    {

    $this->nErr=1;

    $this->sErr="SetValue:插入不存在的列值!";

    return;

    }

    $this->aNew[$Index]=$Value;

    $tmpIn=$Index;

    }

    elseif(is_string($Index))

    {

    $Index=strtolower($Index);

    for($i=0;$i<$this->nCols;$i++)

    {

    if($this->aFName[$i]==$Index)

    break;

    }

    if($i==$this->nCols)

    {

    $this->nErr=1;

    $this->sErr="SetValue:插入不存在的列值!";

    return;

    }

    $this->aNew[$i]=$Value;

    $tmpIn=$i;

    }

    if(!empty($this->sName))

    $this->sName.=",";

    $this->sName.=$this->aFName[$tmpIn];

    //根据当前字段的类型生成相应的新值

    if($this->sValue!="#@!")

    $this->sValue.=",";

    else

    $this->sValue="";

    $ftype=@mysql_field_type($this->nResult,$i);

    //echo($ftype.",".$this->aNew[$i].",".$i.":".$sValue."

    ");

    switch($ftype)

    {

    case "string":

    case "date":

    case "datetime":

    $this->sValue.=""".$this->aNew[$tmpIn].""";

    $this->sEdit=""".$this->aNew[$tmpIn].""";

    break;

    case "int":

    case "unknown":

    $this->sValue.=$this->aNew[$tmpIn];

    $this->sEdit=$this->aNew[$tmpIn];

    break;

    default:

    $this->nErr=1;

    $this->sErr="Update:字段名为".$this->aFName[$tmpIn]."的".$ftype."类型目前版本不支持,请用别的方法添加数据!";

    return;

    }

    if($this->NewEdit==2)

    $this->sName.="=".$this->sEdit;

    }

    function Update() //存储新值到数据库

    {

    $strSQL="";

    if($this->NewEdit==0)

    {

    $this->nErr=1;

    $this->sErr="Update:请先执行AddNew()或者Edit(),再用SetValue()添加值!";

    return;

    }

    if(empty($this->sValue))

    {

    $this->nErr=1;

    $this->sErr="Update:在数据为空的情况下,不能添加或修改数据!";

    return;

    }

    switch($this->NewEdit)

    {

    case 1: //添加

    $strSQL="insert into ";

    $strSQL.=$this->sTName;

    $strSQL.=" (".$this->sName.") ";

    $strSQL.="values (".$this->sValue.")";

    break;

    case 2: //修改

    $strSQL="update ";

    $strSQL.=$this->sTName;

    $strSQL.=" set ";

    $strSQL.=$this->sName;

    if(!empty($this->sEditCon))

    $strSQL.=" where ".$this->sEditCon;

    break;

    default:

    $this->nErr=1;

    $this->sErr="Update:Update()生成SQL语句出错,请检查!";

    return;

    }

    $this->sSQL=$strSQL;

    if(!$this->nResult=mysql_query($strSQL))

    {

    $this->nErr=1;

    $this->sErr="Update:SQL语句:".$strSQL."

    MySql错误:".mysql_error();

    return;

    }

    //echo($this->sSQL."

    ");

    //作清理工作

    $this->NewEdit=0;

    unset($this->aNew);

    mysql_query("commit");

    }

    }

    (责任编辑:铭铭 mingming_ky@126.com TEL:(010)68476636)

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    帝国CMS7.5编辑器上传图片取消宽高的三种方法

    帝国cms如何自动生成缩略图的实现方法

    Windows 12即将到来,将彻底改变人机交互

    帝国CMS 7.5忘记登陆账号密码怎么办?可以phpmyadmin中重置管理员密码

    帝国CMS 7.5 后台编辑器换行,修改回车键br换行为p标签

    Windows 11 版本与 Windows 10比较,新功能一览

    Windows 11激活产品密钥收集及专业版激活方法

    如何从 Windows 11 中完全删除/卸载 OneNote?无解!

    抖音安全与信任开放日:揭秘推荐算法,告别单一标签依赖

    ultraedit编辑器打开文件时,总是提示是否转换为DOS格式,如何关闭?

    IT头条

    华为Pura80系列新机预热,余承东力赞其复杂光线下的视频拍摄实力

    01:28

    阿里千问3开源首战告捷:全球下载破千万,国产AI模型崛起新高度!

    01:22

    DeepSeek R1小版本试升级:网友实测编程能力已达到国际一线水平

    23:15

    NVIDIA 与 Dell 合作,大规模交付 Blackwell AI 系统

    20:52

    Cerebras 以最快的 Llama 4 Maverick 性能引领 LLM 推理竞赛

    20:51

    技术热点

    PHP中的随机性——你觉得自己幸运吗?

    搞定Ubuntu Linux下WPA无线上网

    Java使用内存映射实现大文件的上传

    MySQL安全性指南

    MySQL两项性能的基本测试浅谈

    教您使用UniqueIdentifier选取SQL Server主键

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。