PHP头条
热点:

一款简单实用的php操作mysql数据库类


本文实例讲述了一款简单实用的php操作mysql数据库类。分享给大家供大家参考。具体如下:

代码如下:


/*
本款数据库连接类,他会自动加载sql防注入功能,过滤一些敏感的sql查询关键词,同时还可以增加判断字段 show table status的性质与show table类 获取数据库所有表名等。*/
@ini_set('mysql.trace_mode','off');
class mysql
{
public $dblink;
public $pconnect;
private $search = array('/union(s*(/*.**/)?s*)+select/i', '/load_file(s*(/*.**/)?s*)+(/i', '/into(s*(/*.**/)?s*)+outfile/i');
private $replace = array('union select', 'load_file (', 'into outfile');
private $rs;

function __construct($hostname,$username,$userpwd,$database,$pconnect=false,$charset='utf8')
{
define('allowed_htmltags', '<meta><body><p><br><hr><h1><h2><h3><h4><h5><h6><font><u><i><p><span><ol><ul><li><img><table><tr><td><map>'); <br /> $this->pconnect=$pconnect; <br /> $this->dblink=$pconnect?mysql_pconnect($hostname,$username,$userpwd):mysql_connect($hostname,$username,$userpwd); <br /> (!$this->dblink||!is_resource($this->dblink)) && fatal_error("connect to the database unsuccessfully!"); <br /> @mysql_unbuffered_query("set names {$charset}"); <br /> if($this->version()>'5.0.1') <br /> { <br /> @mysql_unbuffered_query("set sql_mode = ''"); <br /> } <br /> @mysql_select_db($database) or fatal_error("can not select table!"); <br /> return $this->dblink; <br /> } <br /> <br /> function query($sql,$unbuffered=false) <br /> { <br /> //echo $sql.'<br>'; <br /> $this->rs=$unbuffered?mysql_unbuffered_query($sql,$this->dblink):mysql_query($sql,$this->dblink); <br /> //(!$this->rs||!is_resource($this->rs)) && fatal_error("execute the query unsuccessfully! error:".mysql_error()); <br /> if(!$this->rs)fatal_error('在执行sql语句 '.$sql.' 时发生以下错误:'.mysql_error()); <br /> return $this->rs; <br /> } <br /> <br /> function fetch_one($sql) <br /> { <br /> $this->rs=$this->query($sql); <br /> return dircms_strips教程lashes($this->filter_pass(mysql_fetch_array($this->rs,mysql_assoc))); <br /> } <br /> <br /> function get_maxfield($filed='id',$table) // 获取$table表中$filed字段的最大值 <br /> { <br /> $r=$this->fetch_one("select {$table}.{$filed} from `{$table}` order by `{$table}`.`{$filed}` desc limit 0,1"); <br /> return $r[$filed]; <br /> } <br /> <br /> function fetch_all($sql) <br /> { <br /> $this->rs=$this->query($sql); <br /> $result=array(); <br /> while($rows=mysql_fetch_array($this->rs,mysql_assoc)) <br /> { <br /> $result[]=$rows; <br /> } <br /> <br /> mysql_free_result($this->rs); <br /> return dircms_stripslashes($this->filter_pass($result)); <br /> } <br /> <br /> function fetch_all_withkey($sql,$key='id') <br /> { <br /> $this->rs=$this->query($sql); <br /> $result=array(); <br /> while($rows=mysql_fetch_array($this->rs,mysql_assoc)) <br /> { <br /> $result[$rows[$key]]=$rows; <br /> } <br /> <br /> mysql_free_result($this->rs); <br /> return dircms_stripslashes($this->filter_pass($result)); <br /> } <br /> <br /> function last_insert_id() <br /> { <br /> if(($insertid=mysql_insert_id($this->dblink))>0)return $insertid; <br /> else //如果 auto_increment 的列的类型是 bigint,则 mysql_insert_id() 返回的值将不正确. <br /> { <br /> $result=$this->fetch_one('select last_insert_id() as insertid'); <br /> return $result['insertid']; <br /> } <br /> } <br /> <br /> function insert($tbname,$varray,$replace=false) <br /> { <br /> $varray=$this->escape($varray); <br /> $tb_fields=$this->get_fields($tbname); // 升级一下,增加判断字段是否存在 <br /> <br /> foreach($varray as $key => $value) <br /> { <br /> if(in_array($key,$tb_fields)) <br /> { <br /> $fileds[]='`'.$key.'`'; <br /> $values[]=is_string($value)?'''.$value.''':$value; <br /> } <br /> } <br /> <br /> if($fileds) <br /> { <br /> $fileds=implode(',',$fileds); <br /> $fileds=str_replace(''','`',$fileds); <br /> $values=implode(',',$values); <br /> $sql=$replace?"replace into {$tbname}({$fileds}) values ({$values})":"insert into {$tbname}({$fileds}) values ({$values})"; <br /> $this->query($sql,true); <br /> return $this->last_insert_id(); <br /> } <br /> else return false; <br /> } <br /> <br /> function update($tbname, $array, $where = '') <br /> { <br /> $array=$this->escape($array); <br /> if($where) <br /> { <br /> $tb_fields=$this->get_fields($tbname); // 增加判断字段是否存在 <br /> <br /> $sql = ''; <br /> foreach($array as $k=>$v) <br /> { <br /> if(in_array($k,$tb_fields)) <br /> { <br /> $k=str_replace(''','',$k); <br /> $sql .= ", `$k`='$v'"; <br /> } <br /> } <br /> $sql = substr($sql, 1); <br /> <br /> if($sql)$sql = "update `$tbname` set $sql where $where"; <br /> else return true; <br /> } <br /> else <br /> { <br /> $sql = "replace into `$tbname`(`".implode('`,`', array_keys($array))."`) values('".implode("','", $array)."')"; <br /> } <br /> return $this->query($sql,true); <br /> } <br /> <br /> function mysql_delete($tbname,$idarray,$filedname='id') <br /> { <br /> $idwhere=is_array($idarray)?implode(',',$idarray):intval($idarray); <br /> $where=is_array($idarray)?"{$tbname}.{$filedname} in ({$idwhere})":" {$tbname}.{$filedname}={$idwhere}"; <br /> <br /> return $this->query("delete from {$tbname} where {$where}",true); <br /> } <br /> <br /> function get_fields($table) <br /> { <br /> $fields=array(); <br /> $result=$this->fetch_all("show columns from `{$table}`"); <br /> foreach($result as $val) <br /> { <br /> $fields[]=$val['field']; <br /> } <br /> return $fields; <br /> } <br /> <br /> function get_table_status($database) <br /> { <br /> $status=array(); <br /> $r=$this->fetch_all("show table status from `".$database."`"); /////// show table status的性质与show table类似,不过,可以提供每个表的大量信息。 <br /> foreach($r as $v) <br /> { <br /> $status[]=$v; <br /> } <br /> return $status; <br /> } <br /> <br /> function get_one_table_status($table) <br /> { <br /> return $this->fetch_one("show table status like '$table'"); <br /> } <br /> <br /> function create_fields($tbname,$fieldname,$size=0,$type='varchar') // 2010-5-14 修正一下 <br /> { <br /> if($size) <br /> { <br /> $size=strtoupper($type)=='varchar'?$size:8; <br /> $this->query("alter table `{$tbname}` add `$fieldname` {$type}( {$size} ) not null",true); <br /> } <br /> else $this->query("alter table `{$tbname}` add `$fieldname` mediumtext not null",true); <br /> return true; <br /> } <br /> <br /> function get_tables() //获取所有表表名 <br /> { <br /> $tables=array(); <br /> $r=$this->fetch_all("show tables"); <br /> foreach($r as $v) <br /> { <br /> foreach($v as $v_) <br /> { <br /> $tables[]=$v_; <br /> } <br /> } <br /> return $tables; <br /> } <br /> <br /> function create_model_table($tbname) //创建一个内容模型表(start:初始只有字段contentid int(20),用于内容表,/////////////////////// update:2010-5-20 默认加入`content` mediumtext not null,字段) <br /> { <br /> if(in_array($tbname,$this->get_tables())) return false; ///////////////////// 当表名已经存在时,返回 false <br /> if($this->query("create table `{$tbname}` ( <br /> `contentid` mediumint(8) not null , <br /> `content` mediumtext not null, <br /> key ( `contentid` ) <br /> ) engine = myisam default charset=utf8",true))return true; //////////////////// 成功则返回 true <br /> return false; //////////////失败返回 false <br /> } <br /> <br /> function create_table($tbname) //创建一个会员模型空表(初始只有字段userid int(20),用于会员表,2010-4-26) <br /> { <br /> if(in_array($tbname,$this->get_tables())) return false; <br /> if($this->query("create table `{$tbname}` ( <br /> `userid` mediumint(8) not null , <br /> key ( `userid` ) <br /> ) engine = myisam default charset=utf8",true))return true; <br /> return false; <br /> } <br /> <br /> function escape($str) // 过滤危险字符 <br /> { <br /> if(!is_array($str)) return str_replace(array('n', 'r'), array(chr(10), chr(13)),mysql_real_escape_string(preg_replace($this->search,$this->replace, $str), $this->dblink)); <br /> foreach($str as $key=>$val) $str[$key] = $this->escape($val); <br /> return $str; <br /> } <br /> <br /> function filter_pass($string, $allowedtags = '', $disabledattributes = array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavaible', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragdrop', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterupdate', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmoveout', 'onmouseo教程ver', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload')) <br /> { <br /> if(is_array($string)) <br /> { <br /> foreach($string as $key => $val) $string[$key] = $this->filter_pass($val, allowed_htmltags); <br /> } <br /> else <br /> { <br /> $string = preg_replace('/s('.implode('|', $disabledattributes).').*?([s>])/', '', preg_replace('/<(.*?)>/ie', "'<'.preg_replace(array('/网页特效:[^"']*/i', '/(".implode('|', $disabledattributes).")[ ]*=[ ]*["'][^"']*["']/i', '/s+/'), array('', '', ' '), stripslashes('')) . '>'", strip_tags($string, $allowedtags))); <br /> } <br /> return $string; <br /> } <br /> <br /> function drop_table($tbname) <br /> { <br /> return $this->query("drop table if exists `{$tbname}`",true); <br /> } <br /> <br /> function version() <br /> { <br /> return mysql_get_server_info($this->dblink); <br /> } <br /> } <br /> </p></p> <p>希望本文所述对大家的PHP程序设计有所帮助。</p> <p align="left"><div style="display:none;"><span id="url" itemprop="url">/php/25183.html</span><span id="indexUrl" itemprop="indexUrl">www.phpzy.com</span><span id="isOriginal" itemprop="isOriginal">true</span><span id="isBasedOnUrl" itemprop="isBasedOnUrl">/php/25183.html</span><span id="genre" itemprop="genre">TechArticle</span><span id="description" itemprop="description">一款简单实用的php操作mysql数据库类 本文实例讲述了一款简单实用的php操作mysql数据库类。分享给大家供大家参考。具体如下: 代码如下: /* 本款数据库连接类,他会自动加载sql防注入...</span></div></p></div> <div class="art_confoot"><script src='http://www.phpzy.com/ad/art_confoot.js' type="text/javascript"></script></div> <div class="page"></div> <div class="post-related"> <h3 class="tit_3">相关文章</h3><div class="clearfix m_5"> <ul> <li><a href='/php/25182.html' title='phpmyadmin中禁止外网使用的方法' target='_blank'>phpmyadmin中禁止外网使用的方法</a></li><li><a href='/phprm/25181.html' title='传智博客php,该怎么解决' target='_blank'>传智博客php,该怎么解决</a></li><li><a href='/phprm/25180.html' title='请问关于php中使用ajax实现菜单联动查询的思路和方法' target='_blank'>请问关于php中使用ajax实现菜单联动查询的</a></li><li><a href='/phprm/25179.html' title='ThinkPHP数据库查询结果在表单展示' target='_blank'>ThinkPHP数据库查询结果在表单展示</a></li><li><a href='/phprm/25178.html' title='适用于php-5.2的php.ini中文版(4)' target='_blank'>适用于php-5.2的php.ini中文版(4)</a></li><li><a href='/phprm/25177.html' title='php中本土时区设置' target='_blank'>php中本土时区设置</a></li></ul></div> </div> <div class="option-btns"> <div class="art_confoot"><script src='http://www.phpzy.com/ad/xgart_confoot.js' type="text/javascript"></script></div> </div> <div id="related_reading" class="haman-box"> <ul class="xgyd clearfix"> <div class="xgyd_new"><span class="fast-nav-bar"><a href="http://www.phpzy.com/fenlei/list-11-1.html">今日最新</a></span><strong>相关阅读:</strong></div> <li><a href="/php/25182.html">phpmyadmin中禁止外网使用的方法</a></li> <li><a href="/phprm/25181.html">传智博客php,该怎么解决</a></li> <li><a href="/phprm/25180.html">请问关于php中使用ajax实现菜单联动查询的思</a></li> <li><a href="/phprm/25179.html">ThinkPHP数据库查询结果在表单展示</a></li> <li><a href="/phprm/25178.html">适用于php-5.2的php.ini中文版(4)</a></li> <li><a href="/phprm/25177.html">php中本土时区设置</a></li> </ul></div> <footer><div class="hot_c"><span><b>相关频道:</b> <a href="/fenlei/list-1-1.html" >php教程</a>  <a href="/fenlei/list-2-1.html" >php安全</a>  <a href="/fenlei/list-3-1.html" >php面试题</a>  <a href="/fenlei/list-4-1.html" >php框架</a>  <a href="/fenlei/list-6-1.html" >php入门</a>  <a href="/fenlei/list-7-1.html" >php问答</a>  <a href="/fenlei/list-8-1.html" >php应用</a>  <a href="/fenlei/list-10-1.html" >php职业规划</a>  <a href="/fenlei/list-11-1.html" >今日最新</a>  <a href="/fenlei/list-5-1.html" >php资讯</a>  </span></div> </footer> </div> <div class="info_more" id="info_more"></div> <div class="clearfix mt10 art_commentstop" id="commentTopAd"><script src='http://www.phpzy.com/ad/art_commentstop.js' type="text/javascript"></script></div> <div id="hm_t_46468"></div> <a name="comment"></a><div class="comment" id="commentTopAd" itemprop="comment"><h3>PHP之友评论</h3></div> <div class="wb_comment_box" id="commentsiframe"><script type="text/javascript" src='http://www.phpzy.com/ad/comments.js'></script></div> </article> <div class="syzp mt10" style="overflow:hidden;"><div class="tit_7">今天推荐</div><script type="text/javascript" src="http://www.phpzy.com/ad/left_foot_ad.js"></script></div> </div> <aside class="right" id="main_right"> <div class="art_rightad1"><script src='http://www.phpzy.com/ad/art_rightad1.js' type="text/javascript"></script></div> <div class="r_bd mt10 pb10"> <div class="tit_5 tit_6">php教程最近更新</div> <ul id="bbsRank_1" class="rank_ul2 rank_dot" style="border-top:1px solid #AAC5F2;margin-top: -1px;"> <li><a href="/php/25183.html">一款简单实用的php操作mysql数据库类</a> </li> <li><a href="/php/25182.html">phpmyadmin中禁止外网使用的方法</a> </li> <li><a href="/php/25170.html">PHP 上传文件大小限制</a> </li> <li><a href="/php/25169.html">php 多个submit提交表单 处理方法</a> </li> <li><a href="/php/25168.html">PHP 页面跳转到另一个页面的多种方法方法</a> </li> </ul></div> <div class="art_rightad2 mt10"><script src='http://www.phpzy.com/ad/art_rightad2.js' type="text/javascript"></script></div> <div class="r_bd mt10 pb10"> <div class="tit_5 tit_6">热门推荐</div> <ul id="bbsRank_1" class="rank_ul2 rank_dot" style="border-top:1px solid #AAC5F2;margin-top: -1px;"> <li><a href="/php/2584.html">PHP5中SESSION路径配置详解</a> </li> <li><a href="/php/6023.html">在PHP中用Socket发送电子邮件(二)</a> </li> <li><a href="/php/15671.html">PHP中常见的密码处理方式和建议总结,</a> </li> <li><a href="/php/6007.html">基础分页php+mysql_MySQL</a> </li> <li><a href="/php/11089.html">html中select语句读取mysql表中内容</a> </li> </ul> </div> <div class="r_bd mt10 pb10"><div style="margin-top: 0pt;" class="tit_5 tit_6">有意思</div> <script type="text/javascript" src="http://www.phpzy.com/ad/right_ad5.js"></script></div> <div class="art_rightad3"><script src='http://www.phpzy.com/ad/art_rightad3.js' type="text/javascript"></script></div> <div id="focus_look" class="instant-focus mt10"><div class="instant-focus-header clearfix"><h3>实时看点</h3><span>看啥好</span></div> <script type="text/javascript" src="http://www.phpzy.com/ad/right_ad6.js"></script></div> <div class="art_rightad4 mt10"><script src='http://www.phpzy.com/ad/art_rightad4.js' type="text/javascript"></script></div> </aside></div></div> <footer id="footer" class="div_body"> <script type="text/javascript" src="http://www.phpzy.com/ad/arc_foot_ad.js"></script> <script type="text/javascript" src="http://www.phpzy.com/templets/js/foot.js"></script> <div style="display:none;"><script src='http://www.phpzy.com/ad/tongji.js' type="text/javascript"></script></div> <div id="roll"></i><a title="回顶部" id="roll_top" href="#top" style="opacity: 0.7;" target="_self" rel="nofllow"></a></div> </footer> <script type="text/javascript" src="http://www.phpzy.com/ad/maintop.js?131231"></script> </body> </html>