mysql操作类 php_PHP:自己写的mysql操作类

classmysqlModule{private $conn;private $dbname;private $transactions = false; //是否在事务中

public $row;private $c = true; //是否使用外部链接

/ 使用外部标识

function useConn( $conn,$dbname){$this->dbname = $dbname;$this->c =fasle;$this->conn = $conn;$this->conn->query( "set names utf8");

}//初始化连接标识

function __construct( $host,$username,$pwd,$dbname){$this->dbname = $dbname;$this->conn = new mysqli( $host,$username,$password,$this->dbname );$this->conn->query( "set names utf8");

}//转换标识

function wConn( $host,$username,$password,$dbnane){if( $transactions){throw new Exception("Is still in the previous transaction.", 1);return false;

}$this->conn = new mysqli( $host,$username,$password,$dbnane);$this->conn->query( "set names utf8");

}// 事务转移

functionbegin_transaction(){$this->transactions = true;return $this->conn->begin_transaction();

}functioncommit(){$this->transactions = false;return $this->conn->commit();

}functionrollback(){$this->transactions = false;return $this->conn->rollback();

}// 查询字段

function queryField( $table_name,$exclude_field=false,$is_arr=false){$exclude_field = $this->fieldCorrect( $exclude_field,false);$sql = "select `column_name` from information_schema.columns where table_name='{$table_name}' and TABLE_SCHEMA='{$this->dbname}'";$res = $this->conn->query( $sql);$result = array();if( $res){while( $r = $res->fetch_assoc() ){$result[] = $r['column_name'];

}

}else{return false;

}if( is_array($exclude_field) ){foreach ( $exclude_field as $k=>$v){$v = str_replace( '`','',$v);if( in_array( $v,$result) ){array_splice( $result,array_search($v,$result),1);

}

}

}elseif( is_string($exclude_field) && !is_null( $exclude_field) ){$exclude_field = str_replace( '`','',$exclude_field);$exclude_field = explode( ',',$exclude_field);foreach ( $exclude_field as $k=>$v){if( in_array( $v,$result) ){array_splice( $result,array_search($v,$result),1);

}

}

}else{return false;

}if( $is_arr){return $result;

}else{return implode( ',',$result);

}

}// 拷贝表信息

function copyTable( $field,$copy,$target){$field = $this->fieldCorrect( $field);if( is_array( $field ) )$field = implode( ',',$field);$sql = "insert into {$target} ({$field}) select {$field} from {$copy}";$res = $this->conn->query( $sql);//return $sql;

if( $res){return true;

}return false;

}// 查询

function query( $sql,$a=false){$res = $this->conn->query( $sql);if( $a){return $res;

}if( $res){$this->row = mysqli_affected_rows( $this->conn );$returnArr = array();while( $r = $res->fetch_assoc() ){$returnArr[] = $r;

}return $returnArr;

}else{return false;

}

}// 增删改

function idu( $sql){if ( $this->conn->query( $sql) ){$this->row = mysqli_affected_rows( $this->conn );return true;

}else{return false;

}

}// 预处理查询

function search( $sql,$parameter,$field=false,$types=false){$stmt = $this->conn->prepare( $sql);if( $stmt){if( $field){$param = $this->parameters_dispose( $parameter,$types,true);call_user_func_array ( array($stmt,'bind_param'),$this->param_values($param['param']) );$info_arr = $this->bind_result_return_search($stmt,$field);return $info_arr;

}else{$a = stripos( $sql,'from');$b = stripos( $sql,'where');$tableName = substr( $sql,$a+4,$b-$a-4);$tableName = str_replace( '`','',$tableName);$tableName = str_replace( ' ','',$tableName);$field = $this->queryField( $tableName);$param = $this->parameters_dispose( $parameter,$types,true);call_user_func_array ( array($stmt,'bind_param'),$this->param_values($param['param']) );$info_arr = $this->bind_result_return_search($stmt,$field);return $info_arr;

}

}else{return false;

}

}// 预处理修改

function update( $tableName,$where,$parameter,$types=false){$parameter = self::parameters_dispose($parameter,$types);$sql = " update `{$tableName}` set {$parameter['sql']} where {$where}";if( $parameter['type']===0){$stmt = $this->conn->prepare($sql);call_user_func_array ( array($stmt,'bind_param'),$this->param_values($parameter['param']) );if( $stmt->execute() ){$this->row = mysqli_affected_rows( $this->conn );return true;

}return false;

}else{return false;

}

}// 预处理增加

function insert( $table,$parameter,$types=false){$parameters = self::parameters_dispose($parameter,$types);$t = $parameters['type'];unset($parameters['type']);$affected_rows = 0;switch ($t){case 0: //一维关联数组

if(isset($parameters['sql']))$sql = "insert into `{$table}` set ".$parameters['sql'];$stmt = $this->conn->prepare($sql);call_user_func_array (array($stmt,'bind_param'),$this->param_values($parameters['param']));if($stmt->execute()){$this->row = mysqli_affected_rows( $this->conn );return true;

}break;case 1: //二维 1关联 2 数字

if(isset($parameters[0]['sql']))$sql = "insert into `{$table}` set ".$parameters[0]['sql'];foreach ($parameters as $v){$stmt = $this->conn->prepare($sql);call_user_func_array (array($stmt,'bind_param'),$this->param_values($v['param']));if($stmt->execute()){$affected_rows += mysqli_affected_rows( $this->conn );

}else{return false;

}

}$this->row = $affected_rows;return true;break;default:

return false;break;

}

}// 预处理删除

functiondelete(){//很少用到,暂时没写

}/ 筛除杂参

function exclude( $retain,$testArr){if( !is_array( $testArr) ){throw new Exception("parameter 2 is not array", 1);return false;

}if( is_string( $retain) ){$retain = str_replace( '`','',$retain);$retain = str_replace( ' ','',$retain);$retain = explode( ',',$retain);

}elseif ( is_array( $retain) ){

}else{return false;

}foreach ($testArr as $kk => $vv) {$kk = str_replace( '`','',$kk);$kk = str_replace( ' ','',$kk);$a = true;foreach ($retain as $k => $v) {$retain = str_replace( ' ','',$retain);if( $v==$kk){$a = false;break;

}

}if( $a )unset( $testArr[$kk] );

}return $testArr;

}///数组维度检测

function arrTest($array){ //维度检测

if(!is_array($array)) return false;$max_depth = 1;foreach ($array as $value) {if (is_array($value)) {$depth = $this->arrTest($value) + 1;$max_depth = max($max_depth,$depth);

}

}return $max_depth;

}//检测当前维度是否是关联数组

function associativeTest($array =array()){ //关联数组与否检测

if(empty($array)) return false;foreach ($array as $k=>$v){if( is_numeric( $k) ){return false;

}

}return true;

}// 字段纠正 传入字段参数,可以为数组或字符串 ,是否添加删除, true为添加,false删除

private function fieldCorrect( $field,$is_add=true){if( $is_add){if( is_array( $field) ){foreach ( $field as $k=>$v){if( !strstr( $v,'`') )$field[$k] = '`'.$v.'`';

}

}else{$field = explode(',',$field);foreach ( $field as $k=>$v){if( !strstr( $v,'`') )$field[$k] = '`'.$v.'`';

}$field = implode( ',',$field);

}

}else{if( is_array( $field) ){foreach ( $field as $k=>$v){$field[$k] = str_replace( '`','',$v);

}

}else{$field = str_replace( '`','',$field);

}

}return $field;

}// 生成参数类型

private function mkTypes( $arr,$type=false){$sql = "";$param = array();if( $type){$param[] = $type;

}else{$param[] = str_pad( '',count($arr),"s");

}foreach ( $arr as $k=>$v){$sql .= '`'.$k.'`=?,';$param[] = $v;

}return array('sql'=>chop($sql,","),

'param'=>$param);

}//生成bind_param 参数

private function parameters_dispose($array,$types,$s=false){$dimension = $this->arrTest($array); //检测数组维度

switch ($dimension){//一维数组

case 1:

if( $s){if( $types==false){$result = $this->mkTypes( $array);

}else{if(preg_match("/^[idsb]*$/",$types)==1 && strlen($types)==count($array)){$result = $this->mkTypes( $array,$types);

}else{throw new Exception("Invalid value for parameter 'types'");

}

}$result['type'] =0;return $result;

}elseif( $this->associativeTest($array) ){if( $types==false){$result = $this->mkTypes( $array);

}else{if(preg_match("/^[idsb]*$/",$types)==1 && strlen($types)==count($array)){$result = $this->mkTypes( $array,$types);

}else{throw new Exception("Invalid value for parameter 'types'");

}

}$result['type'] =0;return $result;

}else{return false;

}break;//二维1关联2数字数组

case 2:

try{if($this->associativeTest($array)){if( $types==false){$sql="";$num =count($array[array_keys($array)[0]]);$str='';$str = str_pad($str,count($array),"s");foreach (array_keys($array) as $v){$sql .= '`'.$v.'`=?,';}$count = count($array);for ($i=0;$i

}

}

}else{if(preg_match("/^[idsb]*$/",$types)==1 && strlen($types)==count($array) ){$sql="";$num =count($array[array_keys($array)[0]]);foreach (array_keys($array) as $v){$sql .= '`'.$v.'`=?,';}$count = count($array);for ($i=0;$i

}

}

}else{throw new Exception("Invalid value for parameter 'types'");

}

}$result['type'] =1;return $result;

}else{throw new Exception("array parameter error");

}

}catch (Exception $e){throw new Exception("array parameter error");

}break;//其他情况

default:

throw new Exception("array parameter error");

}

}//绑定传参

private function param_values($arr){if (strnatcmp(phpversion(),'5.3') >= 0)

{$values = array();foreach($arr as $key => $value) {$values[$key] = &$arr[$key];

}return $values;

}

}//绑定结果集并返回数据

private function bind_result_return_search($stmt,$str){try{$str = preg_replace('/[` ]/', '', $str);//去掉 ` 和 空格

$str_arr = explode(',', $str); //分割原始字段名

// 制作变量数组

$str_new = "$" . $str;$str_new = str_replace(',', ',$', $str_new);$str_new_arr = explode(',', $str_new);//生成 绑定参数的字符串 php 代码并运行

$evalstr = '$stmt->bind_result(' . $str_new . ');';eval($evalstr);$stmt->execute(); //提交结果集

$this->row = mysqli_affected_rows( $this->conn );//数组赋值字符串生成,将字段名与变量绑定,并写入待执行字符串代码

$string = '';foreach ($str_arr as $k => $v) {$string .= "'" . $v . "'=>" . $str_new_arr[$k] . ",";

}$string = rtrim($string, ',');$arr_eavl_str = '$return_arr[] = $start_arr = array(' . $string . ');';//创建收集器, 循环运行赋值字符串代码

$return_arr = array();while ($stmt->fetch()) {eval($arr_eavl_str);

}//返回结果集

return $return_arr;

}catch(Exception $e){return false;

}

}//关闭连接标识

function__destruct(){if( $this->transactions && $this->c ){throw new Exception("Transaction is not closed, auto rollback!", 1);$this->conn->rollback();

}if( $this->conn && $this->c ) {$this->conn->close();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值