相思资源网 Design By www.200059.com

本文实例讲述了一款简单实用的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*(/*.**/)"connect to the database unsuccessfully!");
  @mysql_unbuffered_query("set names {$charset}");
  if($this->version()>'5.0.1')
  {
   @mysql_unbuffered_query("set sql_mode = ''");
  }
  @mysql_select_db($database) or fatal_error("can not select table!");
  return $this->dblink;
 }
 
 function query($sql,$unbuffered=false)
 {
  //echo $sql.'<br>';
  $this->rs=$unbuffered"execute the query unsuccessfully! error:".mysql_error());
  if(!$this->rs)fatal_error('在执行sql语句 '.$sql.' 时发生以下错误:'.mysql_error());
  return $this->rs;
 }
 
 function fetch_one($sql)
 {
  $this->rs=$this->query($sql);
  return dircms_strips教程lashes($this->filter_pass(mysql_fetch_array($this->rs,mysql_assoc)));
 }
 
 function get_maxfield($filed='id',$table) // 获取$table表中$filed字段的最大值
 {
  $r=$this->fetch_one("select {$table}.{$filed} from `{$table}` order by `{$table}`.`{$filed}` desc limit 0,1");
  return $r[$filed];
 }
 
 function fetch_all($sql)
 {
  $this->rs=$this->query($sql);
  $result=array();
  while($rows=mysql_fetch_array($this->rs,mysql_assoc))
  {
   $result[]=$rows;
  }
  
  mysql_free_result($this->rs);
  return dircms_stripslashes($this->filter_pass($result)); 
 }
 
 function fetch_all_withkey($sql,$key='id')
 {
  $this->rs=$this->query($sql);
  $result=array();
  while($rows=mysql_fetch_array($this->rs,mysql_assoc))
  {
   $result[$rows[$key]]=$rows;
  }
  
  mysql_free_result($this->rs);
  return dircms_stripslashes($this->filter_pass($result)); 
 }
 
 function last_insert_id()
 {
  if(($insertid=mysql_insert_id($this->dblink))>0)return $insertid;
  else //如果 auto_increment 的列的类型是 bigint,则 mysql_insert_id() 返回的值将不正确.
  {
   $result=$this->fetch_one('select last_insert_id() as insertid');
   return $result['insertid'];
  }
 }
 
 function insert($tbname,$varray,$replace=false)
 {
  $varray=$this->escape($varray);
  $tb_fields=$this->get_fields($tbname); // 升级一下,增加判断字段是否存在
  
  foreach($varray as $key => $value)
  {
   if(in_array($key,$tb_fields))
   {
    $fileds[]='`'.$key.'`';
    $values[]=is_string($value)"replace into {$tbname}({$fileds}) values ({$values})":"insert into {$tbname}({$fileds}) values ({$values})";
   $this->query($sql,true);
   return $this->last_insert_id();
  }
  else return false;
 }
 
 function update($tbname, $array, $where = '')
 {
  $array=$this->escape($array);
  if($where)
  {
   $tb_fields=$this->get_fields($tbname); // 增加判断字段是否存在
   
   $sql = '';
   foreach($array as $k=>$v)
   {
    if(in_array($k,$tb_fields))
    {
     $k=str_replace(''','',$k);
     $sql .= ", `$k`='$v'";
    }
   }
   $sql = substr($sql, 1);
   
   if($sql)$sql = "update `$tbname` set $sql where $where";
   else return true;
  }
  else
  {
   $sql = "replace into `$tbname`(`".implode('`,`', array_keys($array))."`) values('".implode("','", $array)."')";
  }
  return $this->query($sql,true);
 }
 
 function mysql_delete($tbname,$idarray,$filedname='id')
 {
  $idwhere=is_array($idarray)"{$tbname}.{$filedname} in ({$idwhere})":" {$tbname}.{$filedname}={$idwhere}";
 
  return $this->query("delete from {$tbname} where {$where}",true);
 }
 
 function get_fields($table)
 {
  $fields=array();
  $result=$this->fetch_all("show columns from `{$table}`");
  foreach($result as $val)
  {
   $fields[]=$val['field'];
  }
  return $fields;
 }
 
 function get_table_status($database)
 {
  $status=array();
  $r=$this->fetch_all("show table status from `".$database."`"); /////// show table status的性质与show table类似,不过,可以提供每个表的大量信息。
  foreach($r as $v)
  {
   $status[]=$v;
  }
  return $status;
 }
 
 function get_one_table_status($table)
 {
  return $this->fetch_one("show table status like '$table'");
 }
 
 function create_fields($tbname,$fieldname,$size=0,$type='varchar') // 2010-5-14 修正一下
 {  
  if($size)
  {
   $size=strtoupper($type)=='varchar'"alter table `{$tbname}` add `$fieldname` {$type}( {$size} )  not null",true);
  }
  else $this->query("alter table `{$tbname}` add `$fieldname` mediumtext  not null",true);
  return true;
 }
 
 function get_tables() //获取所有表表名
 {
  $tables=array();
  $r=$this->fetch_all("show tables");
  foreach($r as $v)
  {
   foreach($v as $v_)
   {
    $tables[]=$v_;
   }
  }
  return $tables;
 }
 
 function create_model_table($tbname) //创建一个内容模型表(start:初始只有字段contentid int(20),用于内容表,/////////////////////// update:2010-5-20     默认加入`content` mediumtext not null,字段)
 {
  if(in_array($tbname,$this->get_tables())) return false;  ///////////////////// 当表名已经存在时,返回 false
  if($this->query("create table `{$tbname}` (
`contentid` mediumint(8) not null ,
`content` mediumtext not null,
key ( `contentid` ) 
) engine = myisam default charset=utf8",true))return true;   ////////////////////  成功则返回 true
  return false; //////////////失败返回 false
 }
 
 function create_table($tbname) //创建一个会员模型空表(初始只有字段userid int(20),用于会员表,2010-4-26)
 {
  if(in_array($tbname,$this->get_tables())) return false;
  if($this->query("create table `{$tbname}` (
`userid` mediumint(8) not null ,
key ( `userid` ) 
) engine = myisam default charset=utf8",true))return true;
  return false;
 }
 
 function escape($str) // 过滤危险字符
 {
  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));
  foreach($str as $key=>$val) $str[$key] = $this->escape($val);
  return $str;
 }
 
 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'))
 {
  if(is_array($string))
  {
   foreach($string as $key => $val) $string[$key] = $this->filter_pass($val, allowed_htmltags);
  }
  else
  {
   $string = preg_replace('/s('.implode('|', $disabledattributes).').*"'<'.preg_replace(array('/网页特效:[^"']*/i', '/(".implode('|', $disabledattributes).")[ ]*=[ ]*["'][^"']*["']/i', '/s+/'), array('', '', ' '), stripslashes('')) . '>'", strip_tags($string, $allowedtags)));
  }
  return $string;
 }
 
 function drop_table($tbname)
 {
  return $this->query("drop table if exists `{$tbname}`",true);
 }
 
 function version()
 {
  return mysql_get_server_info($this->dblink);
 }
}

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

标签:
php,操作,mysql,数据库,类

相思资源网 Design By www.200059.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
相思资源网 Design By www.200059.com

评论“一款简单实用的php操作mysql数据库类”

暂无一款简单实用的php操作mysql数据库类的评论...

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。