Heim  >  Artikel  >  php教程  >  PHP数据库操作之基于Mysqli的数据库操作类库

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

WBOY
WBOYOriginal
2016-06-13 09:37:25932Durchsuche

此类库简单、易用,便于你自己修改和对功能的改善,能解决大部分 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 拼接错误,类库会报出友善的错误提示。
有问题请留言,欢迎大家的批评和建议,加油!学习好运。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn