php mysql数据库操作类(实例讲解)


Posted in PHP onAugust 06, 2017

接着稍微说说整体的思路。整个类的封装,包含一个连接数据库的私有属性$conn和若干操作函数。$conn在对象实例化的时候,由构造函数处理传入的参数后返回一个资源型的连接句柄。而后即可通过调用该实例化的对象的相应方法对数据库进行增删查改的操作。

talk less and show code:

<?php
/** 
*以下代码用于数据库操作类的封装
* 
* @author rex<rex.sp.li@aliyun.com> 
* @version 1.0
* @since 2015
*/


class Mysql{

//数据库连接返回值
private $conn;

/**
* [构造函数,返回值给$conn]
* @param [string] $hostname [主机名]
* @param [string] $username[用户名]
* @param [string] $password[密码]
* @param [string] $dbname[数据库名]
* @param [string] $charset[字符集]
* @return [null]

*/

function __construct($hostname,$username,$password,$dbname,$charset='utf8'){
$conn = @mysql_connect($hostname,$username,$password);
if(!$conn){
echo '连接失败,请联系管理员';
exit;
}
$this->conn = $conn;
$res = mysql_select_db($dbname);
if(!$res){
echo '连接失败,请联系管理员';
exit;
}
mysql_set_charset($charset);
}
function __destruct(){
mysql_close();
}
/**
* [getAll 获取所有信息]
* @param [string] $sql [sql语句]
* @return [array] [返回二维数组]
*/
function getAll($sql){
$result = mysql_query($sql,$this->conn);
$data = array();
if($result && mysql_num_rows($result)>0){
while($row = mysql_fetch_assoc($result)){
$data[] = $row;
}
}
return $data;
}
/**
* [getOne 获取单条数据]
* @param [string] $sql [sql语句]
* @return [array] [返回一维数组]
*/
function getOne($sql){
$result = mysql_query($sql,$this->conn);
$data = array();
if($result && mysql_num_rows($result)>0){
$data = mysql_fetch_assoc($result);
}
return $data;
}

/**
* [getOne 获取单条数据]
* @param [string] $table [表名]
* @param [string] $data [由字段名当键,属性当键值的一维数组]
* @return [type] [返回false或者插入数据的id]
*/

function insert($table,$data){
$str = '';
$str .="INSERT INTO `$table` ";
$str .="(`".implode("`,`",array_keys($data))."`) "; 
$str .=" VALUES ";
$str .= "('".implode("','",$data)."')";
$res = mysql_query($str,$this->conn);
if($res && mysql_affected_rows()>0){
return mysql_insert_id();
}else{
return false;
}
}
/**
* [update 更新数据库]
* @param [string] $table [表名]
* @param [array] $data [更新的数据,由字段名当键,属性当键值的一维数组]
* @param [string] $where [条件,‘字段名'=‘字段属性']
* @return [type] [更新成功返回影响的行数,更新失败返回false]
*/
function update($table,$data,$where){
$sql = 'UPDATE '.$table.' SET ';
foreach($data as $key => $value){
$sql .= "`{$key}`='{$value}',";
}
$sql = rtrim($sql,',');
$sql .= " WHERE $where";
$res = mysql_query($sql,$this->conn);
if($res && mysql_affected_rows()){
return mysql_affected_rows();
}else{
return false;
}
}

/**
* [delete 删除数据]
* @param [string] $table [表名]
* @param [string] $where [条件,‘字段名'=‘字段属性']
* @return [type] [成功返回影响的行数,失败返回false]
*/
function del($table,$where){
$sql = "DELETE FROM `{$table}` WHERE {$where}";
$res = mysql_query($sql,$this->conn);
if($res && mysql_affected_rows()){
return mysql_affected_rows();
}else{
return false;
}
}
}

实例化类:

<?php

//包含数据库操作类文件
include 'mysql.class.php';

//设置传入参数
$hostname='localhost';
$username='root';
$password='123456';
$dbname='aisi';
$charset = 'utf8';

//实例化对象

$db = new Mysql($hostname,$username,$password,$dbname);

//获取一条数据

$sql = "SELECT count(as_article_id) as count FROM as_article where as_article_type_id=1";
$count = $db->getOne($sql);

//获取多条数据

$sql = "SELECT * FROM as_article where as_article_type_id=1 order by as_article_addtime desc limit $start,$limit";
$service = $db->getAll($sql);

//插入数据

$arr = array(
'as_article_title'=>'数据库操作类',
'as_article_author'=>'rex',
);
$res = $db->insert('as_article',$arr);

//更新数据

$arr = array(
'as_article_title'=>'实例化对象',
'as_article_author'=>'Lee',
);
$where = "as_article_id=1";
$res = $db->update('as_article',$arr,$where);

//删除数据

$where = "as_article_id=1";
$res = $db->del('as_article',$where);

?>

演示完代码,大概说几句。

getOne方法传入$sql的sql语句用于查询单条数据并返回一维数组;getAll方法同样传入sql语句,用于查询多条数据,并返回二维数组;insert方法传入表名和关联数组,返回boolen型或者插入数据对应索引;update方法传入表名、关联数组和条件,返回boolen或者影响的行数;del方法传入表名和条件,返回boolen型。

that's all,but not the all.有兴趣的朋友可以把getOne和getAll直接传入sql语句作为参数的方式再优化一下。

PHP 相关文章推荐
PHP及Zend Engine的线程安全模型分析
Nov 10 PHP
探讨PHP中OO之静态关键字以及类常量的详解
Jun 07 PHP
探讨:array2xml和xml2array以及xml与array的互相转化
Jun 24 PHP
基于php使用memcache存储session的详解
Jun 25 PHP
php制作中间带自己定义图片二维码的方法
Jan 27 PHP
浅谈php扩展imagick
Jun 02 PHP
PHP与MYSQL中UTF8编码的中文排序实例
Oct 21 PHP
php 二维数组时间排序实现代码
Nov 19 PHP
php利用嵌套数组拼接与解析json的方法
Feb 07 PHP
php 根据自增id创建唯一编号类
Apr 06 PHP
Laravel框架实现修改登录和注册接口数据返回格式的方法
Aug 17 PHP
php实现二叉树中和为某一值的路径方法
Oct 14 PHP
PHP基于自定义类随机生成姓名的方法示例
Aug 05 #PHP
PHP实现腾讯与百度坐标转换
Aug 05 #PHP
laravel5.4生成验证码的实例讲解
Aug 05 #PHP
CakePHP框架Model函数定义方法示例
Aug 04 #PHP
CakePHP框架Model关联对象用法分析
Aug 04 #PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
Aug 04 #PHP
Win10 下安装配置IIS + MySQL + nginx + php7.1.7
Aug 04 #PHP
You might like
剧场版动画《PSYCHO-PASS 3 FIRST INSPECTOR》3月27日日本上映!
2020/03/06 日漫
一个自定义位数的php多用户计数器代码
2007/03/11 PHP
PHP 上传文件的方法(类)
2009/07/30 PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
2011/06/13 PHP
php 修改、增加xml结点属性的实现代码
2013/10/22 PHP
PHP构造函数与析构函数用法示例
2016/09/28 PHP
动态改变textbox的宽高的js
2006/10/26 Javascript
Jquery之Ajax运用 学习运用篇
2011/09/26 Javascript
js 获取class的元素的方法 以及创建方法getElementsByClassName
2013/03/11 Javascript
jQuery中filter()和find()的区别深入了解
2013/09/25 Javascript
javascript实现列表滚动的方法
2015/07/30 Javascript
AngularJS 入门教程之HTML DOM实例详解
2016/07/28 Javascript
javascript编写简易计算器
2017/05/06 Javascript
微信小程序获取手机系统信息的方法【附源码下载】
2017/12/07 Javascript
vue生成文件本地打开查看效果的实例
2018/09/06 Javascript
JavaScript私有变量实例详解
2019/01/24 Javascript
解决layer弹出层的内容页点击按钮跳转到新的页面问题
2019/09/14 Javascript
使用Typescript和ES模块发布Node模块的方法
2020/05/25 Javascript
vant-ui框架的一个bug(解决切换后onload不触发)
2020/11/11 Javascript
[03:18]DOTA2放量测试专访820:希望玩家加入国服大家庭
2013/08/25 DOTA
基于Python代码编辑器的选用(详解)
2017/09/13 Python
在python中安装basemap的教程
2018/09/20 Python
python中open函数的基本用法示例
2019/09/07 Python
python误差棒图errorbar()函数实例解析
2020/02/11 Python
解决django的template中如果无法引用MEDIA_URL问题
2020/04/07 Python
澳大利亚吉他在线:Artist Guitars
2017/03/30 全球购物
香港礼品网站:GiftU eshop
2017/09/01 全球购物
美国眼镜在线零售商:Dualens
2019/12/07 全球购物
adidas瑞典官方网站:购买阿迪达斯鞋子和运动服
2019/12/11 全球购物
四种会话跟踪技术
2015/05/20 面试题
通信工程毕业生求职信
2013/11/16 职场文书
办公室综合文员岗位职责范本
2014/02/13 职场文书
工作说明书范文
2014/05/07 职场文书
英语辞职信怎么写
2015/02/28 职场文书
搞笑结婚保证书
2015/05/08 职场文书
教师培训简讯
2015/07/20 职场文书