DAY28-mysql扩展与预处理-查出问题的关键
Mysql扩展和Mysqli扩展
第 1 章 mysql扩展
1.1 基本介绍
mysql扩展是指: php程序可以通过mysql扩展来完成对mysql数据库操作.对应的dll文件是 php_mysql.dll 文件。 该文件在 ~php/ext/...
对应的示意图:
1.2 mysql扩展使用的步骤流程
第 2 章 mysqli扩展(重点)
2.1 mysqli扩展的基本介绍
(1) mysqli扩展和mysql扩展都可以完成对mysql数据库的操作.
(2) mysqli扩展可以看做是mysql扩展的升级版, i = improve
(3) mysqli扩展的性能比mysql扩展好,因此我们在新项目开发中,就不再使用mysql扩展, 新项目对mysql数据库的操作使用(mysqli, pdo).
(4) mysqli扩展支持面向对象开发, mysqli也支持面向过程
(5) 使用mysqli扩展前,需要引入一个dll文件, 该文件是 php_mysqli.dll, 该文件是安装php时有,在 ~/php/ext/php_mysqli.dll
2.2 mysqli扩展的使用原理图
2.3 快速入门案例
使用一个基本的案例来讲解mysqli扩展库对表的crud操作。
2.4 mysqli 使用的细节说明
l 如果执行的是dml语句,则返回bool
举例:
l 从mysql_result 对象取出数据的方式有4种
小结:在实际的开发中,我们推荐使用第一种方式.
l 细节-如何判断我们的dml语句是否真正影响了表
l 如何获取到刚刚添加的自增长id的值
2.5 上机练习
2.6 开发一个DAOMySQLi.class.php 工具类
基本的介绍: 封装一个更加完善的DAOMysqli.class.php 数据库操作类,同学们以后可以在项目开发中直接使用。
使用的场景: 我们在一个项目中,会经常使用到对mysql数据库的各种操作(crud),我们可以将这些操作封装到一个类中,当我们需要操作数据库时,直接new一个对象然后使用对象来操作数据库即可。
说明:
(1) DAO, data access object, 数据访问对象,专门对mysql进行操作.
(2) DAOMySQLi.class.php 单例模式
l 走代码(php基础/OOP/sql语句/封装思路) => 默写 DAOMySQLi.class.php
2.7 关于DAOMySQLi.class.php 文件的完善
(1) 如果我们明确的知道,sql 只会返回一条记录, 就调用 fetchOne方法
(2) 编写一个成员方法,获取到刚刚添加的数据的自增长的id
2.8 晚上的作业练习
将原来使用的mysql扩展,改成我们现在使用的DAOMySQLi.class.php 来完成.
2.9 mysqli扩展增强-事务控制
关于事务的概念,我们在前面mysql数据库时讲过了,现在我们直接演示如何在mysqli中,进行事务控制 。
2.10 mysqli扩展-批量执行sql语句
l 先看一个需求
先看一个需求:有时,我们需要一次性执行多条sql语句,比如批量增加用户,这时如果单条单条的向mysql数据库发送sql指令,效率不高,这时可以考虑使用批量执行sql语句的方式.
l 传统的执行sql语句的方式是:
l 批量执行sql语句的基本语法
$sqls = "$sq1;$sql2;$sql3..............";
$mySQLi->multi_query($sql3);
说明: 在拼接$sqls语句是,最后那个sql语句不要给;号.
l 案例说明1
将三个用户一次性添加到mysql数据库中,accout表;
l 关于批量的执行dml语句的细节说明
(1) 批量执行sql语句分成两大类(dml[insert,update,delte], dql[select]), 两大类之间不要混用.
(2) 批量执行sql语句,返回的结果是以一条sql执行的结果为准, 当某条dml错误了,后面的代码就不执行, 但是错误之前的sql还是执行成功的.
l 批量执行select 语句(因为会返回多个结果集)
走代码:
2.11 mysqli扩展的-预处理技术
l 看一个需求
现在需要向mysql数据库添加100个用户,请问如何实现?
l 分析sql语句执行的原理
传统的sql语句执行的流程
使用了预处理技术sql语句执行的流程
l 预处理技术的案例
(1)案例说明: 使用预处理语句快速入门案例
执行dml 语句(没有结果集返回)
需求: 请使用预处理的方式,向数据库添加三个用户
代码说明:
l 案例2
需求: 请使用预处理的方法,查询所有id>5的用户 的id,name,balance,(id可能变化)
代码:
2.12 预处理的防止sql注入
l 看一个sql注入的实际案例
l 解决注入的方式有
(1) 使用PDO
(2) 使用一些好的工具类,工具类有自身的过滤sql语句的功能, 框架/函数
addslashes , mysqli_real_escape_string()
(3) 预处理方法-演示
2.13 课后练习