PHP数据库操作之基于Mysqli的数据库操作类库


Posted in PHP onApril 19, 2014

此类库简单、易用,便于你自己修改和对功能的改善,能解决大部分 PHP 项目中执行的 SQL 操作。

初步工作

首先,请大家下载这个类库 M.class.php 再下载一个 Mysqli 连接数据库的类库 MysqliDb.class.php(打包下载地址) 
新建一个 includes 的文件夹,将下载下来的两个 class 文件,放进去。
然后,请你在项目下创建一个 test.php 文件。注:UTF-8 文件格式

请先根据你机器的情况,填充以下代码,用于连接数据库:

header('Content-Type:text/html;Charset=utf-8');
define('ROOT_PATH', dirname(__FILE__));
define('DB_HOST', 'localhost'); //数据库服务器地址
define('DB_USER', 'root');  //数据库用户名
define('DB_PWD', '×××');//数据库密码
define('DB_NAME', '×××');  //数据库名称
define('DB_PORT', '3306');  //数据库端口
function __autoload($className) {
    require_once ROOT_PATH . '/includes/'. ucfirst($className) .'.class.php'; //自动加载 class 文件
}

好了,上面的这些操作都是初步工作,下面正式进入类库的讲解。

类库讲解

首先,我们得实例化 M.class.php,实例化很简单:

$m = new M(); //这步操作代表 M.class.php 中的所有功能都封装在了变量 $m 中

注:
1、M类库中的方法参数说明,请到 M.class.php 文件中看详细的注释,这里不再进行叙述。建议在学习的时候,对照着看下文件中的参数即注释。
2、讲解代码中用到的数据库结构为:

CREATE TABLE `user` (
  `id` int(8) unsigned NOT NULL auto_increment,
  `name` varchar(50) default NULL,
  `email` varchar(100) default NULL,
  `age` smallint(3) default NULL,
  `class_id` int(8) default NULL,
  `commit_time` int(10) default NULL,
  PRIMARY KEY  (`id`),
  KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
CREATE TABLE `class` (
  `class_id` int(8) NOT NULL auto_increment,
  `class_name` varchar(100) default NULL,
  PRIMARY KEY  (`class_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

并添加一条测试数据。

3、M类库中,大部分方法都分两中类型,即:SQL方法;拼接方法,具体在实例中可以看出
4、以下称述中的 M 为 M.class.php 文件

方法1、Insert() 添加数据

Insert 方法的全部使用案例如下:

$m->Insert("user", null, array('焦焦', 'liruxing1715@sina.com', '23', time())); // 拼接方法:往`user`表中添加一条数据,返回值为数据库影响的行数
$m->Insert("user", null, array('焦焦', 'liruxing1715@sina.com', '23', time()), true); // 功能同上,返回 last_insert_id(插入的增长id)
$m->Insert("INSERT INTO `user` (`name`, `email`, `age`, `commit_time`) VALUES ('张小花', 'zhangxiaohua@sina.com.cn', '22', '".time()."')"); //SQL方法,返回值为数据库影响的行数
$m->Insert("INSERT INTO `user` (`name`, `email`, `age`, `commit_time`) VALUES ('张小花', 'zhangxiaohua@sina.com.cn', '22', '".time()."')", true); // 同上,返回 last_insert_id

注:Insert 方法中的第二个参数若为null,可自动获得插入表除 auto_increment 字段之外的所有字段,详情请看M源文件;若要返回值为最后插入的 ID,那么请设置 Insert 方法的最后一个参数为 true(默认是false);

方法2、Update() 修改数据

update 方法的全部使用案例如下:

$m->Update("user", array('name'=>'李茹茹', 'age'=>24), "id=1"); //拼接方法,修改id为1的数据的名称为“李茹茹”;年龄为“24”,其方法的返回值为受影响的行数
$m->Update("UPDATE `user` SET `name`='李茹茹', `age`=24 WHERE id = 1"); //SQL 用法,功能同上

方法3、Del() 删除数据

Del 方法的全部使用案例如下:

$m->Del('user', 'id=3'); //拼接方法:删除`user`表中 id 为3的数据,返回受影响的行数
$m->Del("DELETE FROM `user` WHERE id=4"); //SQL方法:删除`user`表中 id 为4的数据,返回受影响的行数
$m->Del("DELETE FROM `user` WHERE id in (10, 11, 12)"); //SQL方法:删除多条数据,删除`user`表中 id 为 10、11、12 的数据,返回受影响的行数

方法4、Total() 获取记录数,返回值都为int

Del 方法的全部使用案例如下:

$m->Total('user'); //拼接方法:返回 `user`表中的记录数,无条件
$m->Total('user', 'id>1'); //拼接方法:返回 `user`表中 id 大于1的记录数,有条件
$m->Total("SELECT COUNT(*) AS total FROM `user`"); //SQL方法,注:使用SQL方法,语句中必须使用 "AS total",否则会报错

方法5、IsExists() 检查数据是否存在,返回值为boolean

$m->IsExists('user', "`name`='焦焦'");  //拼接方法:返回`user`表中是否存在`name`为“焦焦”的数据,返回true,若不存在,返回false

方法6、InsertId() 获取表下一个添加的自动增长id,注意,这里不进行添加操作,只是获取下一个增长id

echo $m->InsertId('user'); //获取`user` 表下一个添加的自动增长id

方法7、GetRow() 返回单条数据,返回值为一维数组

GetRow 方法的全部使用案例如下:

$data = $m->GetRow("SELECT `name`,email FROM `user` WHERE id=1");  //SQL方法,返回一维数组,例如:Array ( [name] => 焦焦 [email] => liruxing1715@sina.com ) 
$data = $m->GetRow("SELECT u.`name`, u.email, c.class_name FROM `user` u, `class` c WHERE u.class_id=c.class_id AND u.id=1");  //SQL方法,多表查询
$data = $m->GetRow('user', '`name`,email', "id=1");  //拼接方法
$data = $m->GetRow('user as u,`class` c', 'u.`name`,u.email,c.class_name', "u.id=1 AND u.class_id=c.class_id"); //拼接方法,多表查询
$data = $m->GetRow("SELECT `name`,email FROM `user`"); //如果没有指定条件应该是显示全部信息,但是在此方法中将默认显示第一条(不推荐这么使用!!!)

$data 是查询出来的一维数组。

方法8、GetOne() 返回单个数据

GetOne 方法的全部使用案例如下:

$name = $m->GetOne("SELECT `name` FROM `user` WHERE id=1");  //SQL方法,返回一个字符串,例如:焦焦
$name = $m->GetOne("user", "name", "id=1");  //拼接方法,返回一个字符串,例如:焦焦

方法9、FetchAll() 返回所有记录

$data = $m->FetchAll("user");  //返回`user`表中的所有记录,以二维数组的形式
$data = $m->FetchAll("SELECT * FROM `user`");  //SQL 方法,功能和返回值同上
$data = $m->FetchAll("user", "name,email", "id>1", 'id DESC', '2'); //返回两条id>1的数据,只显示name,email,并且以id 为倒序排序。注:请注意该方法的最后一个参数也可以为'0,2',目的是为分页准备的,如果第一页为'0,2'的话,那么第二页就是'2,2'
//该方法也支持联表查询和多表查询,下面以联表查询为例
$data = $m->FetchAll("`user` as u LEFT JOIN `class` as c ON u.class_id=c.class_id", "u.`name`,u.email, c.class_name", "u.id=1"); //注意:该拼接方法中,ON 添加的位置

注:对于该 FetchAll 方法,后续我会写一篇使用该方法进行完美分页的文章!!请关注。

方法10、MultiQuery() 执行多条SQL语句

$sql = "INSERT INTO user (`name`,email, age, class_id, commit_time) VALUES ('贾花花', 'jiahuahua@sina.com.cn', '22', '1', '".time()."')"; //添加一个名叫“贾花花”的学生信息
$sql .= ";DELETE FROM `user` WHERE `name`='焦焦'"; //删除一条名叫“焦焦”的学生信息
//解释:$sql 是多条 SQL 以英文;(分号)拼接起来的
$data = $m->MultiQuery($sql); //返回为true,代表执行成功;为false,代表执行失败

类库讲解完毕

到此该类库的全部功能就讲解完毕,希望你能多看看M文件,了解其内部运行的机制。M 文件不会存在执行缓慢情况,请大家放心使用。
如果在使用过程中出现 SQL 拼接错误,类库会报出友善的错误提示。
有问题请留言,欢迎大家的批评和建议,加油!学习好运。

PHP 相关文章推荐
mysql 的 like 问题,超强毕杀记!!!
Jan 18 PHP
一个很不错的PHP翻页类
Jun 01 PHP
php数组编码转换示例详解
Mar 11 PHP
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
Apr 05 PHP
跟我学Laravel之视图 & Response
Oct 15 PHP
php使用pdo连接并查询sql数据库的方法
Dec 24 PHP
PHP实现的简单网络硬盘
Jul 29 PHP
php 基础函数
Feb 10 PHP
php基于session锁防止阻塞请求的方法分析
Aug 07 PHP
PHP设计模式之工厂方法设计模式实例分析
Apr 25 PHP
php输出反斜杠的实例方法
Sep 19 PHP
laravel5.2表单验证,并显示错误信息的实例
Sep 29 PHP
PHP中批量生成静态html(命令行下运行PHP)
Apr 19 #PHP
PHP不用递归实现无限分级的例子分享
Apr 18 #PHP
利用php下载xls文件(自己动手写的)
Apr 18 #PHP
php生成随机字符串可指定纯数字、纯字母或者混合的
Apr 18 #PHP
从PHP的源码中深入了解stdClass类
Apr 18 #PHP
理解PHP中的stdClass类
Apr 18 #PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
Apr 17 #PHP
You might like
PHP的分页功能
2007/03/21 PHP
解析PHP生成静态html文件的三种方法
2013/06/18 PHP
PHP中的traits实现代码复用使用实例
2015/05/13 PHP
php微信公众号开发(4)php实现自定义关键字回复
2016/12/15 PHP
ThinkPHP5框架缓存查询操作分析
2018/05/30 PHP
监控 url fragment变化的js代码
2010/04/19 Javascript
Javascript之旅 对象的原型链之由来
2010/08/25 Javascript
一个简单的Ext.XTemplate的实例代码
2012/03/18 Javascript
Extjs 继承Ext.data.Store不起作用原因分析及解决
2013/04/15 Javascript
Node.js与PHP、Python的字符处理性能对比
2014/07/06 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
浅析JavaScript动画
2015/06/10 Javascript
jQuery xml字符串的解析、读取及查找方法
2016/03/01 Javascript
JavaScript中数组去除重复的三种方法
2016/04/22 Javascript
AngularJS基础 ng-include 指令简单示例
2016/08/01 Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
2017/08/04 jQuery
基于复选框demo(分享)
2017/09/27 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
2018/04/09 Javascript
微信小程序开发实现的IP地址查询功能示例
2019/03/28 Javascript
详解Python中__str__和__repr__方法的区别
2015/04/17 Python
Python多线程结合队列下载百度音乐的方法
2015/07/27 Python
使用Python制作表情包实现换脸功能
2019/07/19 Python
Python之Numpy的超实用基础详细教程
2019/10/23 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
2019/11/16 Python
关于python 跨域处理方式详解
2020/03/28 Python
python如何绘制疫情图
2020/09/16 Python
Python实现自动整理文件的脚本
2020/12/17 Python
安踏官方商城:anta.cn
2019/12/16 全球购物
医学类导师推荐信范文
2013/11/19 职场文书
大学新生欢迎词
2014/01/10 职场文书
实践单位评语
2014/04/26 职场文书
反邪教警示教育方案
2014/05/13 职场文书
团日活动总结模板
2014/06/25 职场文书
幼儿园大班开学寄语
2014/08/02 职场文书
学习优秀党员杨宗兴先进事迹材料思想汇报
2014/09/14 职场文书
nginx网站服务如何配置防盗链(推荐)
2021/03/31 Servers