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 相关文章推荐
攻克CakePHP系列二 表单数据显示
Oct 22 PHP
PHP 简单日历实现代码
Oct 28 PHP
PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
Jun 17 PHP
PHP常用特殊运算符号和函数总结(php新手入门必看)
Feb 02 PHP
php 获取本地IP代码
Jun 23 PHP
curl和libcurl的区别简介
Jul 01 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
Oct 29 PHP
PHP那些琐碎的知识点(整理)
May 20 PHP
PHP框架Laravel中实现supervisor执行异步进程的方法
Jun 07 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
Sep 27 PHP
Laravel事件监听器用法实例分析
Mar 12 PHP
使用composer命令加载vendor中的第三方类库 的方法
Jul 09 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下载xls文件(自己动手写的)
2014/04/18 PHP
PHP数组游标实现对数组的各种操作详解
2016/01/26 PHP
php判断邮箱地址是否存在的方法
2016/02/13 PHP
PHP实现验证码校验功能
2017/11/16 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
2018/08/21 PHP
this和执行上下文实现代码
2010/07/01 Javascript
JavaScript window.document的属性、方法和事件小结
2012/10/24 Javascript
利用Javascript判断操作系统的类型实现不同操作系统下的兼容性
2013/01/29 Javascript
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
2015/08/26 Javascript
浅析js中substring和substr的方法
2015/11/09 Javascript
jQuery实例—选项卡的简单实现(js源码和jQuery)
2016/06/14 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
js的函数的按值传递参数(实例讲解)
2017/11/16 Javascript
arcgis for js栅格图层叠加(Raster Layer)问题
2017/11/22 Javascript
关于react中组件通信的几种方式详解
2017/12/10 Javascript
实例分析js事件循环机制
2017/12/13 Javascript
微信小程序开发之自定义tabBar的实现
2018/09/06 Javascript
JavaScript的Proxy可以做哪些有意思的事儿
2019/06/15 Javascript
小程序实现分类页
2019/07/12 Javascript
React.js组件实现拖拽排序组件功能过程解析
2020/04/27 Javascript
Python实现将DOC文档转换为PDF的方法
2015/07/25 Python
pandas数据分组和聚合操作方法
2018/04/11 Python
JavaScript实现一维数组转化为二维数组
2018/04/17 Python
使用pytorch进行图像的顺序读取方法
2018/07/27 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
详解python使用turtle库来画一朵花
2019/03/21 Python
Python2 与Python3的版本区别实例分析
2020/03/30 Python
使用Python解析Chrome浏览器书签的示例
2020/11/13 Python
HTML5 语音搜索(淘宝店语音搜素)
2013/01/03 HTML / CSS
先进事迹报告会感言
2014/01/24 职场文书
个人求职自荐信范文
2014/06/20 职场文书
考研导师推荐信范文
2015/03/27 职场文书
最美乡村教师观后感
2015/06/11 职场文书
关于童年的读书笔记
2015/06/26 职场文书
一封真诚的自荐信帮你赢得机会
2019/05/07 职场文书
使用Mysql计算地址的经纬度距离和实时位置信息
2022/04/29 MySQL