当前位置:首页 > PHP教程 > php类库 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-03 13:48:17 浏览: 评论:0 

这篇文章主要介绍了一款简单实用的php操作mysql数据库类,不但包含了php针对mysql数据库的常见操作之外,还有针对危险字符的过滤功能,非常具有实用价值,需要的朋友可以参考下

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

  1. /* 
  2. 本款数据库连接类,他会自动加载sql防注入功能,过滤一些敏感的sql查询关键词,同时还可以增加判断字段 show table status的性质与show table类 获取数据库所有表名等。*/ 
  3. @ini_set('mysql.trace_mode','off'); 
  4. class mysql 
  5.  public $dblink
  6.  public $pconnect
  7.  private $search = array('/union(s*(/*.**/)?s*)+select/i''/load_file(s*(/*.**/)?s*)+(/i''/into(s*(/*.**/)?s*)+outfile/i'); 
  8.  private $replace = array('union   select''load_file   (''into   outfile'); 
  9.  private $rs
  10.  
  11.  function __construct($hostname,$username,$userpwd,$database,$pconnect=false,$charset='utf8'
  12.  { 
  13.   define('allowed_htmltags''<html><embed><title><meta><body><a><p><br><hr><h1><h2><h3><h4><h5><h6><font><u><i><b><strong><div><span><ol><ul><li><img><table><tr><td><map>');  
  14.   $this->pconnect=$pconnect
  15.   $this->dblink=$pconnect?mysql_pconnect($hostname,$username,$userpwd):mysql_connect($hostname,$username,$userpwd); 
  16.   (!$this->dblink||!is_resource($this->dblink)) && fatal_error("connect to the database unsuccessfully!"); 
  17.   @mysql_unbuffered_query("set names {$charset}"); 
  18.   if($this->version()>'5.0.1'
  19.   { 
  20.    @mysql_unbuffered_query("set sql_mode = ''"); 
  21.   } 
  22.   @mysql_select_db($databaseor fatal_error("can not select table!"); 
  23.   return $this->dblink; 
  24.  } 
  25.  
  26.  function query($sql,$unbuffered=false) 
  27.  { 
  28.   //echo $sql.'<br>'; 
  29.   $this->rs=$unbuffered?mysql_unbuffered_query($sql,$this->dblink):mysql_query($sql,$this->dblink); 
  30.   //(!$this->rs||!is_resource($this->rs)) && fatal_error("execute the query unsuccessfully! error:".mysql_error()); 
  31.   if(!$this->rs)fatal_error('在执行sql语句 '.$sql.' 时发生以下错误:'.mysql_error()); 
  32.   return $this->rs; 
  33.  } 
  34.  
  35.  function fetch_one($sql
  36.  { 
  37.   $this->rs=$this->query($sql); 
  38.   return dircms_strips教程lashes($this->filter_pass(mysql_fetch_array($this->rs,mysql_assoc))); 
  39.  } 
  40.  
  41.  function get_maxfield($filed='id',$table// 获取$table表中$filed字段的最大值 
  42.  { 
  43.   $r=$this->fetch_one("select {$table}.{$filed} from `{$table}` order by `{$table}`.`{$filed}` desc limit 0,1"); 
  44.   return $r[$filed]; 
  45.  } 
  46.  
  47.  function fetch_all($sql
  48.  { 
  49.   $this->rs=$this->query($sql); 
  50.   $result=array(); 
  51.   while($rows=mysql_fetch_array($this->rs,mysql_assoc)) 
  52.   { 
  53.    $result[]=$rows
  54.   } 
  55.    
  56.   mysql_free_result($this->rs); 
  57.   return dircms_stripslashes($this->filter_pass($result));  
  58.  } 
  59.  
  60.  function fetch_all_withkey($sql,$key='id'
  61.  { 
  62.   $this->rs=$this->query($sql); 
  63.   $result=array(); 
  64.   while($rows=mysql_fetch_array($this->rs,mysql_assoc)) 
  65.   { 
  66.    $result[$rows[$key]]=$rows
  67.   } 
  68.    
  69.   mysql_free_result($this->rs); 
  70.   return dircms_stripslashes($this->filter_pass($result));  
  71.  } 
  72.  
  73.  function last_insert_id() 
  74.  { 
  75.   if(($insertid=mysql_insert_id($this->dblink))>0)return $insertid
  76.   else //如果 auto_increment 的列的类型是 bigint,则 mysql_insert_id() 返回的值将不正确. 
  77.   { 
  78.    $result=$this->fetch_one('select last_insert_id() as insertid'); 
  79.    return $result['insertid']; 
  80.   } 
  81.  } 
  82.  
  83.  function insert($tbname,$varray,$replace=false) 
  84.  { 
  85.   $varray=$this->escape($varray); 
  86.   $tb_fields=$this->get_fields($tbname); // 升级一下,增加判断字段是否存在 
  87.    
  88.   foreach($varray as $key => $value
  89.   { 
  90.    if(in_array($key,$tb_fields)) 
  91.    { 
  92.     $fileds[]='`'.$key.'`'
  93.     $values[]=is_string($value)?'''.$value.''':$value
  94.    } 
  95.   } 
  96.  
  97.   if($fileds
  98.   { 
  99.    $fileds=implode(',',$fileds); 
  100.    $fileds=str_replace(''','`',$fileds); 
  101.    $values=implode(',',$values); 
  102.    $sql=$replace?"replace into {$tbname}({$fileds}) values ({$values})":"insert into {$tbname}({$fileds}) values ({$values})"
  103.    $this->query($sql,true); 
  104.    return $this->last_insert_id(); 
  105.   } 
  106.   else return false; 
  107.  } 
  108.  
  109.  function update($tbname$array$where = ''
  110.  { 
  111.   $array=$this->escape($array); 
  112.   if($where
  113.   { 
  114.    $tb_fields=$this->get_fields($tbname); // 增加判断字段是否存在 
  115.     
  116.    $sql = ''
  117.    foreach($array as $k=>$v
  118.    { 
  119.     if(in_array($k,$tb_fields)) 
  120.     { 
  121.      $k=str_replace(''','',$k); 
  122.      $sql .= ", `$k`='$v'"
  123.     } 
  124.    } 
  125.    $sql = substr($sql, 1); 
  126.     
  127.    if($sql)$sql = "update `$tbname` set $sql where $where"
  128.    else return true; 
  129.   } 
  130.   else 
  131.   { 
  132.    $sql = "replace into `$tbname`(`".implode('`,`'array_keys($array))."`) values('".implode("','"$array)."')"
  133.   } 
  134.   return $this->query($sql,true); 
  135.  } 
  136.  
  137.  function mysql_delete($tbname,$idarray,$filedname='id'
  138.  { 
  139.   $idwhere=is_array($idarray)?implode(',',$idarray):intval($idarray); 
  140.   $where=is_array($idarray)?"{$tbname}.{$filedname} in ({$idwhere})":" {$tbname}.{$filedname}={$idwhere}"
  141.  
  142.   return $this->query("delete from {$tbname} where {$where}",true); 
  143.  } 
  144.  
  145.  function get_fields($table
  146.  { 
  147.   $fields=array(); 
  148.   $result=$this->fetch_all("show columns from `{$table}`"); 
  149.   foreach($result as $val
  150.   { 
  151.    $fields[]=$val['field']; 
  152.   } 
  153.   return $fields
  154.  } 
  155.  
  156.  function get_table_status($database
  157.  { 
  158.   $status=array(); 
  159.   $r=$this->fetch_all("show table status from `".$database."`"); /////// show table status的性质与show table类似,不过,可以提供每个表的大量信息。 
  160.   foreach($r as $v
  161.   { 
  162.    $status[]=$v
  163.   } 
  164.   return $status
  165.  } 
  166.  
  167.  function get_one_table_status($table
  168.  { 
  169.   return $this->fetch_one("show table status like '$table'"); 
  170.  } 
  171.  
  172.  function create_fields($tbname,$fieldname,$size=0,$type='varchar'// 2010-5-14 修正一下 
  173.  {   
  174.   if($size
  175.   { 
  176.    $size=strtoupper($type)=='varchar'?$size:8; 
  177.    $this->query("alter table `{$tbname}` add `$fieldname` {$type}( {$size} )  not null",true); 
  178.   } 
  179.   else $this->query("alter table `{$tbname}` add `$fieldname` mediumtext  not null",true); 
  180.   return true; 
  181.  } 
  182.  
  183.  function get_tables() //获取所有表表名 
  184.  { 
  185.   $tables=array(); 
  186.   $r=$this->fetch_all("show tables"); 
  187.   foreach($r as $v
  188.   { 
  189.    foreach($v as $v_
  190.    { 
  191.     $tables[]=$v_
  192.    } 
  193.   } 
  194.   return $tables
  195.  } 
  196.  
  197.  function create_model_table($tbname//创建一个内容模型表(start:初始只有字段contentid int(20),用于内容表,/////////////////////// update:2010-5-20     默认加入`content` mediumtext not null,字段) 
  198.  { 
  199.   if(in_array($tbname,$this->get_tables())) return false;  ///////////////////// 当表名已经存在时,返回 false 
  200.   if($this->query("create table `{$tbname}` ( 
  201. `contentid` mediumint(8) not null , 
  202. `content` mediumtext not null, 
  203. key ( `contentid` )  
  204. ) engine = myisam default charset=utf8",true))return true;   ////////////////////  成功则返回 true 
  205.   return false; //////////////失败返回 false 
  206.  } 
  207.  
  208.  function create_table($tbname//创建一个会员模型空表(初始只有字段userid int(20),用于会员表,2010-4-26) 
  209.  { 
  210.   if(in_array($tbname,$this->get_tables())) return false; 
  211.   if($this->query("create table `{$tbname}` ( 
  212. `userid` mediumint(8) not null , 
  213. key ( `userid` )  
  214. ) engine = myisam default charset=utf8",true))return true; 
  215.   return false; 
  216.  } 
  217.  
  218.  function escape($str// 过滤危险字符 
  219.  { 
  220.   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)); 
  221.   foreach($str as $key=>$val$str[$key] = $this->escape($val); 
  222.   return $str
  223.  } 
  224.  
  225.  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')) 
  226.  { 
  227.   if(is_array($string)) 
  228.   { 
  229.    foreach($string as $key => $val$string[$key] = $this->filter_pass($val, allowed_htmltags); 
  230.   } 
  231.   else 
  232.   { 
  233.    $string = preg_replace('/s('.implode('|'$disabledattributes).').*?([s>])/''', preg_replace('/<(.*?)>/ie'"'<'.preg_replace(array('/网页特效:[^"']*/i', '/(".implode('|', $disabledattributes).")[ ]*=[ ]*["'][^"']*["']/i', '/s+/'), array('', '', ' '), stripslashes('')) . '>'"strip_tags($string$allowedtags))); 
  234.   } 
  235.   return $string
  236.  } 
  237.  
  238.  function drop_table($tbname
  239.  { 
  240.   return $this->query("drop table if exists `{$tbname}`",true); 
  241.  } 
  242.  
  243.  function version() 
  244.  { 
  245.   return mysql_get_server_info($this->dblink); 
  246.  } 

希望本文所述对大家的PHP程序设计有所帮助。

Tags: php操作mysql数据库类

分享到: