您的位置:首页 > 编程语言 > PHP开发

PHP操作mysql类的封装

2016-03-02 11:11 639 查看
版本一:

<?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);
}
}
?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: