mysql数据库处理类_mysql数据库处理类

简单的模仿TP做了一个数据库处理类,在平时处理数据库语句的时候可以方便一点

Select,PrePaer,Delete,Update,Insert方法应放在最后使用,Where,OrderBy,Limit,Field方法则不要求顺序,ClearKey方法如使用需放在最前使用,我为了以前代码的兼容性没有删除,已不建议使用

欢迎提出建议,欢迎回复,欢迎收藏,本分享持续更新

/*2015-04-09 Update */

之前代码有些问题,已修复

1.清理标记函数Clear()没有对Field标记进行清理

2.PrePare函数开始时调用了清理标记函数,导致排序等无效

/*2015-04-11 Update */

此次是个大更,基本上所有函数都涉及到了,已有使用的兄弟愿意更新就更,不过基本上之前的用法已不再支持,不愿意更新就用之前的吧

/**

* Created by PhpStorm.

* User: MCtion

* 接收数据库名,连接数据库,提供CURD接口

* 连接模式:PDO

* 方法:Insert,Update,Delete,Select,PrePare,ClearKey,Limit,OrderBy,Where

*/

if(!defined("__WEBROOT__")) define("__WEBROOT__",$_SERVER['DOCUMENT_ROOT']);

class NewSql {

public $Db; //数据库实例

protected $_Sql = 'mysql';

protected $_Host = 'localhost';

protected $_User = 'TestUser';

protected $_Pass = 'TestUserSqlPass';

protected $_DbName = null; //数据库名

protected $_Where = '';

protected $_OrderBy = '';

protected $_Limit = '';

protected $_Field = '*';

protected $_Clear = 0; //状态,0表示查询条件干净,1表示查询条件污染

/**

* 初始化类

* @param string $DbName 设置数据库名

*/

public function __construct($DbName = 'test'){

$this -> _DbName = $DbName;

$Db = new PDO($this -> _Sql.':host='.$this -> _Host.';dbname='.$this -> _DbName,$this -> _User,$this -> _Pass,array(PDO::ATTR_PERSISTENT => True));

$Db -> exec("set names utf8");

$this -> Db = $Db;

}

/**

* 插入方法

* @param string $TabName 操作的数据表名

* @param array $Val 字段-值数组

* @return int 受影响的行数

*/

public function Insert($TabName,array $Val){

foreach($Val as $K=>$V){

$Key_Arr[] = $K;

$Val_Arr[] = is_string($V)?"'".$V."'":$V;

}

$Query = "insert into ".$TabName."(".implode(',',$Key_Arr).") values(".implode(',',$Val_Arr).")";

return $this -> Db -> exec($Query);

}

/**

* 删除方法

* @param string $TabName 操作的数据表名

* @return int 受影响的行数

*/

public function Delete($TabName){

$Query = "delete from ".$TabName." ".$this -> _Where;

$this -> _Clear = 1;

$this -> Clear();

return $this -> Db -> exec(trim($Query));

}

/**

* 更新函数

* @param string $TabName 操作的数据表名

* @param array $Val 参数数组

* @return int 受影响的行数

*/

public function Update($TabName,array $Val){

$ValStr = '';

foreach($Val as $K=>$V){

$ValStr .= $K.'=';

$ValStr .= is_string($V) ? "'".$V."'," : $V.',';

}

$ValStr = substr($ValStr,0,strlen($ValStr) - 1);

$Query = "update ".trim($TabName)." set ".trim($ValStr)." ".trim($this -> _Where);

return $this -> Db -> exec($Query);

}

/**

* 查询函数

* @param string $TabName 操作的数据表名

* @return PDOStatement

*/

public function Select($TabName){

$Query = "select ".trim($this -> _Field)." from ".$TabName." ".trim($this -> _Where)." ".trim($this -> _OrderBy)." ".trim($this -> _Limit);

$this -> _Clear = 1;

$this -> Clear();

return $this -> Db -> query(trim($Query));

}

/**

* @param string $TabName 要操作的数据表名

* @return PDOStatement 返回构造后的语句对象

*/

public function PrePare($TabName){

$Query = "select ".trim($this -> _Field)." from ".$TabName." ".trim($this -> _Where)." ".trim($this -> _OrderBy)." ".trim($this -> _Limit);

$this -> _Clear = 1;

$this -> Clear();

return $this -> Db -> prepare(trim($Query));

}

/**

* @param array $Option 组合条件的二维数组,例:$Options['Field1'] = array(1,'=>','or')

* @return $this

*/

public function Where(array $Option){

if($this -> _Clear > 0) $this -> Clear();

$this -> _Where = ' where';

$ContConditions = 'and';

foreach($Option as $K=>$V){

$Conditions1 = isset($V[1]) ? $V[1] : '=';

$Conditions2 = isset($V[2]) ? $V[2] : 'and';

$ContConditions = $Conditions2;

$this -> _Where .= ' '.$K.' '.$Conditions1.' '.$V[0].' '.$Conditions2;

}

$this -> _Where = substr($this -> _Where,0,strlen($this -> _Where) - strlen($ContConditions));

return $this;

}

/**

* 设置排序

* @param array $Val 排序条件数组 例:array('sort'=>'desc')

* @return $this

*/

public function OrderBy(array $Val){

if($this -> _Clear > 0) $this -> Clear();

$this -> _OrderBy = "order by ";

foreach($Val as $K=>$V){

$this -> _OrderBy .= $K." ".$V.",";

}

$this -> _OrderBy = substr($this -> _OrderBy,0,strlen($this -> _OrderBy) - 1);

return $this;

}

/**

* 设置查询行数及页数

* @param $Page $PageSize不为空时为页数,否则为行数

* @param null $PageSize 为空则函数设定取出行数,不为空则设定取出行数及页数

* @return $this

*/

public function Limit($Page,$PageSize = null){

if($this -> _Clear > 0) $this -> Clear();

if($PageSize == null){

$this -> _Limit = "limit ".$Page;

}else{

$SelStart = ($Page - 1) * $PageSize;

$this -> _Limit = "limit ".$SelStart.",".$PageSize;

}

return $this;

}

/**

* 设置查询字段

* @param array $Field 字段数组

* @return $this

*/

public function Field(array $Field){

if($this -> _Clear > 0) $this -> Clear();

$this -> _Field = '';

foreach($Field as $K=>$V){

$this -> _Field .= $V.",";

}

$this -> _Field = substr($this -> _Field,0,strlen($this -> _Field) - 1);

return $this;

}

/**

* 清理标记函数

*/

protected function Clear(){

$this -> _Where = '';

$this -> _OrderBy = '';

$this -> _Limit = '';

$this -> _Clear = 0;

$this -> _Field = '*';

}

/**

* 手动清理标记

* @return $this

*/

public function ClearKey(){

$this -> _Where = '';

$this -> _OrderBy = '';

$this -> _Limit = '';

$this -> _Clear = 0;

$this -> _Field = '*';

return $this;

}

/**

* @param string $Address 备份类型,默认为SERVER,用以返回后判断动作

* @return mixed|string 返回备份信息的JSON格式数据

*/

public function BackUp($Address = 'SERVER'){

//连接数据库

$DB = new MySqli($this -> _Host,$this -> _User,$this -> _Pass,$this -> _DbName);

$DB -> query("set names utf8");

//检查并创建备份目录、名称

$FilePath = '/BackUp/';

if(!file_exists(__WEBROOT__.$FilePath)){

mkdir(__WEBROOT__.$FilePath,0777,True);

}

$FileName = 'Back'.date('YmdHis').'.sql';

$File = fopen(__WEBROOT__.$FilePath.$FileName,'a'); //追加模式打开文件句柄

//创建头部信息

$Sql = Null;

$Sql .= "-- Server Type :MySql \\r\\n";

$Sql .= "-- Create User : \\r\\n";

$Sql .= "-- Create Time :".date('Y-m-d H:i:s')." \\r\\n\\r\\n\\r\\n";

fwrite($File,$Sql); //写入头部信息

$Databases = $DB -> query("show tables"); //查询所有数据表

while($vo = $Databases -> fetch_array(MYSQL_NUM)){ //遍历数据表

$Sql = Null;

$Table = $DB -> query("show create table ".$vo[0]); //查询当前表的创建语句

if($vo2 = $Table -> fetch_array(MYSQL_NUM)){

$Sql = Null;

//创建表语句

$Sql .= "-- Create Table ".$vo2[0]." \\r\\n";

$Sql .= $vo2[1].";\\r\\n\\r\\n";

//创建数据语句

$Sql .= "-- Insert Table ".$vo2[0]." \\r\\n";

$Insert = $DB -> query("select * from ".$vo2[0]);

while($vo3 = $Insert -> fetch_array(MYSQL_ASSOC)){

$Sql .= "Insert Into ".$vo2[0]." Values(";

foreach($vo3 as $Key=>$Val){

$Sql .= "'".$DB -> real_escape_string($Val)."',";

}

$Sql = substr($Sql,0,strlen($Sql) - 1);

$Sql .= ");\\r\\n";

}

}else{

$BackUpArr['address'] = strtoupper($Address);

$BackUpArr['state'] = 1;

$BackUpArr['msg'] = '失败:无法读取表语句,请重试或联系管理员';

$BackUpArr['filepath'] = '';

@unlink(__WEBROOT__.$FilePath.$FileName);

return json_encode($BackUpArr);

}

$Sql .= "\\r\\n\\r\\n";

fwrite($File,$Sql); //每个数据库表插入一次

}

fclose($File);

$BackUpArr['address'] = strtoupper($Address);

$BackUpArr['state'] = 200;

$BackUpArr['msg'] = '备份成功';

$BackUpArr['filepath'] = $FilePath.$FileName;

return json_encode($BackUpArr);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值