本文实例讲述了一款简单实用的php操作mysql数据库类。分享给大家供大家参考。具体如下:
[U]复制代码[/U] 代码如下:
/*
本款数据库连接类,他会自动加载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', ' [ol]
[table][tr][td]');
$this->pconnect=$pconnect;
$this->dblink=$pconnect?mysql_pconnect($hostname,$username,$userpwd):mysql_connect($hostname,$username,$userpwd);
(!$this->dblink||!is_resource($this->dblink)) && fatal_error("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.'
';
$this->rs=$unbuffered?mysql_unbuffered_query($sql,$this->dblink):mysql_query($sql,$this->dblink);
//(!$this->rs||!is_resource($this->rs)) && fatal_error("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;
}
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)?implode(',',$idarray):intval($idarray);
$where=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'");
}