当前位置:Gxlcms > PHP教程 > 一款实用的phpmysql数据库连接类_PHP教程

一款实用的phpmysql数据库连接类_PHP教程

时间:2021-07-01 10:21:17 帮助过:6人阅读

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><h2><h2><h3><h4><h5><h6><font><u><i><b><strong><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 /> }</p> <p> 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 /> }</p> <p> 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 /> }</p> <p> 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 /> }</p> <p> 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 /> }</p> <p> 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 /> }</p> <p> 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 /> }</p> <p> function insert($tbname,$varray,$replace=false)<br /> {<br /> $varray=$this->escape($varray);<br /> $tb_fields=$this->get_fields($tbname); // mb.bKjia.c0m 升级一下,增加判断字段是否存在<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 /> }</p> <p> 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 /> }</p> <p> function update($tbname, $array, $where = '')<br /> {<br /> $array=$this->escape($array);<br /> if($where)<br /> {<br /> $tb_fields=$this->get_fields($tbname); // www.bKjia.c0m,增加判断字段是否存在<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}";</p> <p> return $this->query("delete from {$tbname} where {$where}",true);<br /> }</p> <p> 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 /> }</p> <p> 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 /> }</p> <p> function get_one_table_status($table)<br /> {<br /> return $this->fetch_one("show table status like '$table'");<br /> }</p> <p> 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 /> }</p> <p> 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 /> }</p> <p> 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 /> }</p> <p> 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 /> }</p> <p> 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 /> }</p> <p> 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>])/', '2', preg_replace('/<(.*?)>/ie', "'<'.preg_replace(array('/网页特效:[^"']*/i', '/(".implode('|', $disabledattributes).")[ tn]*=[ tn]*["'][^"']*["']/i', '/s+/'), array('', '', ' '), stripslashes('1')) . '>'", strip_tags($string, $allowedtags)));<br /> }<br /> return $string;<br /> }</p> <p> function drop_table($tbname)<br /> {<br /> return $this->query("drop table if exists `{$tbname}`",true);<br /> }</p> <p> function version()<br /> {<br /> return mysql_get_server_info($this->dblink);<br /> }<br /> }</p></p> <p align="left"><span id="url" itemprop="url">http://www.bkjia.com/PHPjc/629738.html</span><span id="indexUrl" itemprop="indexUrl">www.bkjia.com</span><span id="isOriginal" itemprop="isOriginal">true</span><span id="isBasedOnUrl" itemprop="isBasedOnUrl">http://www.bkjia.com/PHPjc/629738.html</span><span id="genre" itemprop="genre">TechArticle</span><span id="description" itemprop="description">php教程 mysql教程数据库教程连接类 本款数据库连接类,他会自动加载sql防注入功能,过滤一些敏感的sql查询关键词,同时还可以增加判断字...</span></p> </div> <div class=""> <ul class="m-news-opt fix"> <li class="opt-item"> <a href='/PHPjiqiao-162106.html' target='_blank'><p>< 上一篇</p><p class="ellipsis">phphtml过滤代码(预定义的字符转换为HTML实体)_PHP教程</p></a> </li> <li class="opt-item ta-r"> <a href='/PHPjiqiao-162108.html' target='_blank'><p>下一篇 ></p><p class="ellipsis">php用户验证base64验证方法_PHP教程</p></a> </li> </ul> </div> </div> </div> <div class="g-title fix"> <h2 class="title-txt">人气教程排行</h2> </div> <div class="m-rank u-dashed mb40"> <ul> <li class="rank-item"> <a href="/PHPjiqiao-379253.html" title='php如何获取跳转前的url' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">174次</span> <span class="g-sort-num top">1</span> php如何获取跳转前的url </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-379019.html" title='php格林威治时间转换成当前时间的方法' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">174次</span> <span class="g-sort-num second">2</span> php格林威治时间转换成当前时间的方法 </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-366629.html" title='为什么php不能做大型系统?' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">174次</span> <span class="g-sort-num third">3</span> 为什么php不能做大型系统? </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-207623.html" title='range函数怎么用' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">174次</span> <span class="g-sort-num ">4</span> range函数怎么用 </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-162433.html" title='php中计算页面加载时间几种方法总结_PHP教程' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">174次</span> <span class="g-sort-num ">5</span> php中计算页面加载时间几种方法总结_PHP教程 </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-140221.html" title='求帮助,关于paypal支付返回值修改订单状态' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">174次</span> <span class="g-sort-num ">6</span> 求帮助,关于paypal支付返回值修改订单状态 </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-103588.html" title='typecho怎么配置文章内容页?' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">174次</span> <span class="g-sort-num ">7</span> typecho怎么配置文章内容页? </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-99213.html" title='PhpStorm左侧structure不显示文件的方法列表是这么回事?' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">174次</span> <span class="g-sort-num ">8</span> PhpStorm左侧structure不显示文件的方法列表是这么回事? </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-92208.html" title='查看PHP的环境变量_PHP' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">174次</span> <span class="g-sort-num ">9</span> 查看PHP的环境变量_PHP </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-170.html" title='PHP Primary script unknown 解决方法总结' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">174次</span> <span class="g-sort-num ">10</span> PHP Primary script unknown 解决方法总结 </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-148.html" title='php的命名空间与自动加载实现方法' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">174次</span> <span class="g-sort-num ">11</span> php的命名空间与自动加载实现方法 </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-133.html" title='解决laravel 出现ajax请求419(unknown status)的问题' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">174次</span> <span class="g-sort-num ">12</span> 解决laravel 出现ajax请求419(unknown status)的问题 </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-462817.html" title='php 如何删除mysql记录' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">173次</span> <span class="g-sort-num ">13</span> php 如何删除mysql记录 </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-388448.html" title='PHP如何替换数组中的指定元素' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">173次</span> <span class="g-sort-num ">14</span> PHP如何替换数组中的指定元素 </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-124270.html" title='怎么去除字符串中非汉字、非字母、非数字的字符' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">173次</span> <span class="g-sort-num ">15</span> 怎么去除字符串中非汉字、非字母、非数字的字符 </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-112291.html" title='mysql如何一次执行多条SQL语句' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">173次</span> <span class="g-sort-num ">16</span> mysql如何一次执行多条SQL语句 </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-110669.html" title='修改header里面的Connection为close解决方法' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">173次</span> <span class="g-sort-num ">17</span> 修改header里面的Connection为close解决方法 </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-153.html" title='PHP基于session.upload_progress 实现文件上传进度显示功能详解' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">173次</span> <span class="g-sort-num ">18</span> PHP基于session.upload_progress 实现文件上传进度显示功能详解 </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-125.html" title='php5.6.x到php7.0.x特性小结' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">173次</span> <span class="g-sort-num ">19</span> php5.6.x到php7.0.x特性小结 </a> </li> <li class="rank-item"> <a href="/PHPjiqiao-378118.html" title='php为什么会出现504错误' class="item-name ellipsis" target="_blank"> <span class="g-art-count fr">172次</span> <span class="g-sort-num ">20</span> php为什么会出现504错误 </a> </li> </ul> </div> </div> </div> <!-- / 教程内容页 --> </div> </div> <!-- 页尾 --> <div class="footer"> 本站所有资源全部来源于网络,若本站发布的内容侵害到您的隐私或者利益,请联系我们删除!</div> <!-- / 页尾 --> <script type="text/javascript" src="/kan/js/read.js"></script> <div style="display:none"> <div class="login-box" id="login-dialog"> <div class="login-top"><a class="current" rel="nofollow" id="login1" onclick="setTab('login',1,2);" >登录</a></div> <div class="login-form" id="nav-signin"> <!-- <div class="login-ico"><a rel="nofollow" class="qq" id="qqlogin" target="_blank" href="/user-center-qqlogin.html"> QQ </a></div> --> <div class="login-box-form" id="con_login_1"> <form id="loginform" action="/user-center-login.html" method="post" onsubmit="return false;"> <p class="int-text"> <input class="email" id="username" name="username" type="text" value="用户名或Email" onfocus="if(this.value=='用户名或Email'){this.value='';}" onblur="if(this.value==''){this.value='用户名或Email';};" ></p> <p class="int-text"> <input class="password1" type="password" id="password" name="password" value="******" onBlur="if(this.value=='') this.value='******';" onFocus="if(this.value=='******') this.value='';" > </p> <p class="int-info"> <label class="ui-label"> </label> <label for="agreement" class="ui-label-checkbox"> <input type="checkbox" value="" name="cookietime" id="cookietime" checked="checked" value="2592000"> <input type="hidden" name="notforward" id="notforward" value="1"> <input type="hidden" name="dosubmit" id="dosubmit" value="1">记住我的登录 </label> <a rel="nofollow" class="aright" href="/user-center-forgetpwd.html" target="_blank"> 忘记密码? </a></p> <p class="int-btn"><a rel="nofollow" id="loginbt" class="loginbtn"><span>登录</span></a></p> </form> </div> <form id="regform" action="/user-center-reg.html" method="post"> <div class="login-reg" style="display: none;" id="con_login_2"> <input type="hidden" name="t" id="t"/> <p class="int-text"> <input id="email" name="email" type="text" value="Email" onfocus="if(this.value=='Email'){this.value='';}" onblur="if(this.value==''){this.value='Email';};"></p> <p class="int-text"> <input id="uname" name="username" type="text" value="用户名或昵称" onfocus="if(this.value=='用户名或昵称'){this.value='';}" onblur="if(this.value==''){this.value='用户名或昵称';};"></p> <p class="int-text"> <input type="password" id="pwd" name="password" value="******" onBlur="if(this.value=='') this.value='******';" onFocus="if(this.value=='******') this.value='';"> </p> <p class="int-text1"><span class="inputbox"> <input id="validate" name="validate" type="text" value="验证码" onfocus="if(this.value=='验证码'){this.value='';}" onblur="if(this.value==''){this.value='验证码';};"> </span><span class="yzm-img"><img src="/user-checkcode-index" alt="看不清楚换一张" id="indexlogin"></p> <p class="int-info"> <label> <input value="" name="agreement" id="agreement" CHECKED="checked" type="checkbox"> 我已阅读<a rel="nofollow" href="/user-center-agreement.html">用户协议</a>及<a rel="nofollow" href="/user-center-agreement.html">版权声明</a></label> </p> <p class="int-btn"><input type="hidden" name="dosubmit"/> <a rel="nofollow" class="loginbtn" id="register"><span>注册</span></a></p> </div> </form> </div> </div> </div> </div> <script type="text/javascript" src="/kan/js/foot_js.js"></script> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?6dc1c3c5281cf70f49bc0bc860ec24f2"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> <script type="text/javascript" src="/layui/layui.js"></script> <script> layui.use('code', function() { layui.code({ elem: 'pre', //默认值为.layui-code about: false, skin: 'notepad', title: 'php怎么实现数据库验证跳转代码块', encode: true //是否转义html标签。默认不开启 }); }); </script> </body> </html>