通行证: 用户 密码 域名空间  下载中心 社区论坛 信息公告 my小屋
联系我们
设为首页
加入收藏

 

qq,asp,php,jsp,xml,sql,.net,编程 程序 网页图象 建站经验 私服
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿
论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图
专题 | 应用软件 | 聊天通讯 | q q 专栏 | 建站经验 | 在线工具 | 站长club | 注 册 表 | 旧版
社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 网络赚钱 | 网站地图 | 广告服务 | 服务
当前位置:首页>>编程开发>>sql专区>>正文 新版上线![旧版]
注:打开慢时请稍等
mysql的操作类

http://www.iyit.net  日期:2006-5-3 19:18:22  来源:  点击:
参加讨论】 <?
class mysqldb
{
//mysql数据库操作类
//作者:熊毅
//版本:1.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:用户号:scxy78;呢称:小熊,请多关照

//可以自由转载,修改请通知我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语句


function mysqldb($tablename="",$database="mysql") //构造函数
{
$this->nerr=0;
$this->newedit=0;
$this->stname=$tablename;
$this->nresult=-1;
$this->ncols=0;
$this->nrows=0;
$this->noffset=0;
$this->eof=true;
unset($this->afname);
unset($this->anew);
if(!$this->linkid=mysql_connect($host,$user,$password))
{
$this->nerr=1;
$this->serr="mysqldb:数据库连接出错,请启动服务!";
return;
}
if(!$this->dbid=mysql_select_db($database))
{
$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."<br><br>");
}
else
{
echo("没有错误<br><br>");
}
}

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."<br>mysql错误:".mysql_error();
return false;
}
return true;
}

//在数据库里执行查询,sql是查询的字段,condition是查询条件,order是以什么排序,sequenc是按升序还是降序
function query($tablename="",$sql="*",$condition="",$order="",$sequenc="")
{
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."<br>mysql错误:".mysql_error()."<br>";
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="") //标志开始添加数据
{
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."<br><br>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="") //对指定数据库表进行编辑
{
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."<br><br>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;
return;
}
if(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;
return;
}
}

function update() //存储新值到数据库
{
$strsql="";
$sname="";
$svalue="#@!";
$sedit="#@!";

if($this->newedit==0)
{
$this->nerr=1;
$this->serr="update:请先执行addnew()或者edit(),再用setvalue()添加值!";
return;
}

//得到想要添加的字段名
for($i=0;$i<$this->ncols;$i++)
{
if(is_int($this->anew[$i])||(is_string($this->anew[$i])&&!empty($this->anew[$i])))
{
if(!empty($sname))
$sname.=",";
$sname.=$this->afname[$i];
//根据当前字段的类型生成相应的新值
if($svalue!="#@!")
$svalue.=",";
else
$svalue="";
$ftype=@mysql_field_type($this->nresult,$i);
//echo($ftype.",".$this->anew[$i].",".$i.":".$svalue."<br>");
switch($ftype)
{
case "string":
case "date":
$svalue.="\"".$this->anew[$i]."\"";
$sedit="\"".$this->anew[$i]."\"";
break;
case "int":
case "unknown":
$svalue.=$this->anew[$i];
$sedit=$this->anew[$i];
break;
default:
$this->nerr=1; $this->serr="update:字段名为".$this->afname[$i]."的".$ftype."类型目前版本不支持,请用别的方法添加数据!";
return;
}
if($this->newedit==2)
$sname.="=".$sedit;
}
}

if(empty($svalue))
{
$this->nerr=1;
$this->serr="update:在数据为空的情况下,不能添加或修改数据!";
return;
}

switch($this->newedit)
{
case 1:
$strsql="insert into ";
$strsql.=$this->stname;
$strsql.=" (".$sname.") ";
$strsql.="values (".$svalue.")";
break;
case 2:
$strsql="update ";
$strsql.=$this->stname;
$strsql.=" set ";
$strsql.=$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."<br><br>mysql错误:".mysql_error();
return;
}

//作清理工作
$this->newedit=0;
unset($this->anew);
mysql_query("commit");
return;
}
}
?>


编辑:黑鹰 [发送给好友] [打印本页] [关闭窗口] [返回顶部]
上一篇:谈两种数据库内容html格式的输出方法
下一篇:万能的数据库连接程序
转载请注明来源:www.iyit.net
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

 相关文章
第十七章 sql编程(二) 第十七章 sql编程(一) windows2000下安装apache php4 mysql  
windows 2000下安装php4及mysql大揭密  win2000 + php + mysql + tomcat + jsp 超级服务器apache+mysql+php+ssl之完全
超级服务器apache+mysql+php+ssl之完全 linux下快速安装“apache+php3+mysql” 如何集成linux、apache、php4、fastcgi
接触 solaris : 安装 apache + php + m linux服务器配置方案mysql(上) sql server 7.0与以前的版本相比,安全
设置proxy server和sql server实现互联 microsoft sql server 7.0安全问题     mysql安全性指南(3)(转)            
mysql安全性指南 (2)(转)            mysql安全性指南 (1)(转)            怎样才能限制sql server只能让指定的机
远程检测ms sql server账号安全性      模拟sql server的两个日期处理函数     用dbsql类加快开发mysql数据库程序的速
将access数据库移植到microsoft sql se microsoft sql server 7.0数据库设置与 microsoft sql server 7.0数据库升级转
最新更新 热点排行 推荐新闻
sql server 7.0与以前的版本相比,安全
设置proxy server和sql server实现互联
microsoft sql server 7.0安全问题   
mysql安全性指南(3)(转)           
mysql安全性指南 (2)(转)          
在frontpage 2000中插入flash动画
用frontpage 2000使图像“减肥”
提高frontpage 2002使用效率
用frontpage 2000创建网页动画
用frontpage 2000巧做样式表
用frontpage 2000制作鼠标光照特效
用frontpage轻松转换图片格式
frontpage10全透视教程(9)
frontpage10全透视教程(8)
frontpage10全透视教程(7)
sql server 7.0与以前的版本相比,安全
sql简明教程(6)
sql简明教程(5)
sql简明教程(4)
sql简明教程(3)
qq珊瑚虫外挂4.0版本发布!
多个广告位招商!
摄影后期系列一:1分钟为数码相片去红眼
qq挂机说明
asp进度条
photoshop通道抠图:给秀发飞扬的mm照
教您显示器亮度对比度的调节
新版上线,今日正式开通!!!
更多精彩图文广告等着您!
asp中使用sql语句教程
sql简明教程(1)
第二十章 开发delphi对象式数据管理功
sql简明教程(1)
vbscript和javascript互相调用 
jsp教程(四)-jsp actions的使用
操作系统被入侵后的修复过程
五一别忘电脑防毒 养成良好上网习惯
google对ie浏览器将捆绑搜索功能表担忧
新版上线,今日正式开通!!!
用photoshop创意图形“岁月”
摄影后期系列一:1分钟为数码相片去红眼

 友情链接
设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
copyrights © 2004-2006 iyit.net all rights reserved.
网站合作、广告联系qq:147007642、466949678
易特网络技术 点击这里给我发消息