PHP操作mysql类的封装
2016-03-02 11:11
639 查看
版本一:
版本二:(来源于慕课网的学习)
DB引擎工厂类
<?php //这是一个工具类,作用是完成对数据库的操作 class SqlHelper { public $conn; public $dbname="test"; public $username="root"; public $password="root"; public $host="localhost"; public function __construct() { $this->conn=mysqli_connect($this->host,$this->username,$this->password,$this->dbname); if (!$this->conn) { mysqli_error($this->conn); die("连接失败".mysqli_error($this->conn)); } //设置访问数据库的编码 mysqli_query($this->conn, "set names utf8") or die(mysqli_error($this->conn)); } //执行dql语句 public function execute_dql($sql) { $res=mysqli_query($this->conn,$sql) or die(mysqli_error($this->conn)); return $res; } //执行dql语句,但是返回的是一个数组 public function execute_dql2($sql) { $arr=array(); $res=mysqli_query($this->conn,$sql) or die(mysqli_error($this->conn)); //$i=0; while($row=mysqli_fetch_assoc($res)) { //$arr[$i++]=$row; $arr[]=$row; } //这里就可以马上把$res关闭 mysqli_free_result($res); return $arr; } //考虑分页情况的查询,这是一个比较通用的并体现oop编程思想的代码 //$sql1="select * from where 表名 limit 0,6"; //$sql2="select * from count(id) from 表名"; public function execute_dql_fenye($sql1,$sql2,$fenyePage) { //分页显示的数据 $res=mysqli_query($this->conn, $sql1) or die(mysqli_error($this->conn)); $arr=array(); while($row=mysqli_fetch_assoc($res)) { $arr[]=$row; } //这里就可以马上把$res关闭 mysqli_free_result($res); $res2=mysqli_query($this->conn, $sql2) or die(mysqli_error($this->conn)); if($row=mysqli_fetch_row($res2)) { $fenyePage->pageCount=ceil($row[0]/$fenyePage->pageSize); $fenyePage->rowCount=$row[0]; } mysqli_free_result($res2); $fenyePage->res_array=$arr; $navigation=""; $navigation.= "<a href='{$fenyePage->gotoUrl}?pageNow=1'>首页</a> "; //显示上一页和下一页 if($fenyePage->pageNow > 1) { $prePage=$fenyePage->pageNow-1; $navigation.= "<a href='{$fenyePage->gotoUrl}?pageNow=$prePage'>上一页</a> "; } $page_whole=10;//整体翻几页 $start=(floor(($fenyePage->pageNow-1)/$page_whole))*$page_whole+1; $end=$start+$page_whole; //整体每10页向前翻页 //如果当前pageNow在1-10 if ($fenyePage->pageNow>$page_whole) $navigation.= "<a href='{$fenyePage->gotoUrl}?pageNow=".($start-1)."'><<</a> "; for(;$start<$end && $start<=$fenyePage->pageCount;$start++) { $navigation.= "<a href='{$fenyePage->gotoUrl}?pageNow=$start'>[$start]</a>"; } if($start <= $fenyePage->pageCount) $navigation.= " <a href='{$fenyePage->gotoUrl}?pageNow=$start'>>></a>"; //显示上一页和下一页 if($fenyePage->pageNow < $fenyePage->pageCount) { $nextPage=$fenyePage->pageNow+1; $navigation.= " <a href='{$fenyePage->gotoUrl}?pageNow=$nextPage'>下一页</a> "; } $navigation.= "<a href='{$fenyePage->gotoUrl}?pageNow=$fenyePage->pageCount'>尾页</a> "; //显示当前页和共有多少页 $navigation.= "第{$fenyePage->pageNow}页/共{$fenyePage->pageCount}页"; $fenyePage->navigation=$navigation; } //执行dml语句 public function execute_dml($sql) { $b=mysqli_query($this->conn, $sql) or die(mysqli_error($this->conn)); if(!$b) { return 0; } else { if(mysqli_affected_rows($this->conn)>0) { return 1;//表示执行成功 } else { return 2;//表示没有行收到影响 } } } //关闭连接的方法 public function close_connect() { if(!empty($this->conn)) mysqli_close($this->conn); } } ?>
版本二:(来源于慕课网的学习)
<?php error_reporting(E_ALL &~E_NOTICE &~E_DEPRECATED); class mysql { /* 报错函数 @param string $error */ function err($error) { die("对不起,您的操作有误,错误原因为:".$error); //die有两种作用 输出 和 终止 相当于echo和exit的组合 } /* 连接数据库 @param string $config 配置数组 array($dbhost, $dbuser, $dbpsw, $dbname, $dbcharset) @return bool 连接成功或不成功 */ function connect($config) { extract($config); //将数组还原成变量 if(!($con = mysql_connect($dbhost, $dbuser, $dbpsw))) { //mysql_connect 连接数据库函数 $this->err(mysql_error()); } if(!mysql_select_db($dbname, $con)) { //mysql_select_db 选择数据库的函数 $this->err(mysql_error()); } mysql_query("set names ".$dbcharset); //使用mysql_query 设置编码,格式: mysql_query("set names utf8") } /* 执行sql语句 @param string $sql @return bool 返回执行成功、资源或执行失败 */ function query($sql) { if(!($query = mysql_query($sql))) { //使用mysql_query函数执行sql语句 $this->err($sql."<br />".mysql_error()); //mysql_error报错 } else { return $query; } } /* 列表 @param source $query sql语句通过mysql_query 执行出来的资源 @return array 返回列表数组 */ function findAll($query) { while($rs = mysql_fetch_array($query, MYSQL_ASSOC)) { //mysql_fetch_array函数把资源换为数组,一次转换出一行出来 $list[] = $rs; } //这里应该释放结果集吧 //mysql_free_result($query) return isset($list) ? $list : ""; } /* 单条 @param source $query sql语句通过mysql_query执行出来的资源 return array 返回单条信息数据 */ function findOne($query) { $rs = mysql_fetch_array($query, MYSQL_ASSOC); return $rs; } /* 指定行的指定字段的值 @param source $query sql语句通过mysql_query执行出来的资源 return array 返回指定行的指定字段的值 */ function findResult($query, $row = 0, $field = 0) { $rs = mysql_result($query, $row, $field); return $rs; } /* 添加函数 @param string $table 表名 @param array $arr 添加数组(包含字段和值的一维数组) */ function insert($table, $arr) { // $sql = "insert into 表名(多个字段) values(多个值)"; // mysql_query($sql) foreach ($arr as $key => $value) { $value = mysql_real_escape_string($value); $keyArr[] = "`".$key."`"; //把$arr数组当中的键名保存到$keyArr数组当中 insert into test(`a`,`b`,`c`) values... 其中 ` 防止字段中因关键字而出错 $valueArr[] = "'".$value."'"; //把$arr数组当中的键值保存到$valueArr当中,因为值多为字符串,而sql语句里面insert当中如果值是字符串的话要加单引号,所以这个地方要加上单引号 } $keys = implode(",", $keyArr); //implode函数是把数组组合成字符串 implode(分隔符,数组) $values = implode(",", $valueArr); $sql = "insert into ".$table."(".$keys.") values(".$values.")"; //sql的插入语句 格式:insert into 表(多个字段) values(多个值) $this->query($sql); //调用类自身的query(执行)方法执行这条sql语句 注:$this指代自身 return mysql_insert_id(); } /* 修改函数 @param string $table 表名 @param array $arr 修改数组(包含字段和值的一维数组) @param string $where 条件 */ function update($table, $arr, $where) { //update 表名 set 字段=字段值 where .... foreach($arr as $key=>$value) { $value = mysql_real_escape_string($value); $keyAndvalueArr[] = "`".$key."`='".$value."'"; } $keyAndvalues = implode(",", $keyAndvalueArr); $sql = "update ".$table." set ".$keyAndvalues." where ".$where; //修改操作 格式update } /* 删除函数 @param string $table 表名 @param string $where 条件 */ function del($table, $where) { $sql = "delete from ".$table." where ".$where; //删除sql语句 格式:delete from 表名 where 条件 return $this->query($sql); } } ?>
DB引擎工厂类
<?php //DB 引擎工厂类 class DB { public static $db; public static function init($dbtype, $config) { self::$db = new $dbtype; self::$db->connect($config); } public static function query($sql) { return self::$db->query($sql); } public static function findAll($sql) { $query = self::$db->query($sql); return self::$db->findAll($query); } public static function findOne($sql) { $query = self::$db->query($sql); return self::$db->findOne($query); } public static function findResult($sql, $row = 0, $field = 0) { $query = self::$db->query($sql); return self::$db->findResult($query, $row, $field); } public static function insert($table, $arr) { return self::$db->insert($table, $arr); } public static function update($table, $arr, $where) { return self::$db->update($table, $arr, $where); } public static function del($table, $where) { return self::$db->del($table, $where); } } ?>
相关文章推荐
- laravel安装
- 深入浅析用PHP实现MVC
- php 相同的产品 一个背景色
- php 学习笔记 —— 基础语法 (一)
- php switch判断一个数所在的范围
- window系统上用PHP获取本地物理IP代码
- Ajax+PHP实现跨域访问的两种方式
- PHP旧代码迁移
- 详解PHP文件下载的原理和实现
- PHP非阻塞模式 (转自 尘缘)
- php编辑ppt方法 PHPPowerPoint类 学习
- ubuntu执行curl_init报错
- PHP下的MVC
- PHP第五课 自己主动类型转换与流程控制
- thinkphp中的session()方法
- PHP函数
- php缓存技术基础知识
- PHP 5.0~5.6 各版本兼容性的 cURL 文件上传
- 143 php 接口
- PHP团队编码质量提升之道