PDO增删改查预处理.docx
《PDO增删改查预处理.docx》由会员分享,可在线阅读,更多相关《PDO增删改查预处理.docx(17页珍藏版)》请在冰豆网上搜索。
PDO增删改查预处理
回顾
接口:
interface,接口内部只能有常量和公有的抽象方法。
只能被实现implements。
PHP重载:
当访问一个不存在的或者没有权限访问的属性或者方法的时候,会自动触发魔术方法。
属性重载
方法重载
对象保存:
将对象结构及其属性内容保存到外部文件。
序列化:
serialize,将一个复杂的数据类型变成一个带有结构的字符串
反序列化:
unserialize,将一个字符串转化成对应的复杂数据类型(如果要实现对一个对象字符串进行反序列化,必须保证该对象的类已经存在:
自动加载)
对象遍历:
foreach,遍历对象的公有属性(将公有属性的值和属性名赋值给对应$value和$key)
接口iterator:
类实现Iterator接口
current:
获取当前数组元素的值$this->hobby[$this->position]
key:
获取当前下标
next:
数组指针下移
rewind:
重置指针
valid:
判断当前指针是否有效,使用key函数判断数组下标
快速排序:
1.找到一个基准元素;2比较数组中其他所有元素;3.将与基准元素比较后的结果根据大小放到两个不同的数组中;4.数组递归调用函数自己;5.返回一个已经排好序的数组(array_merge())
递归点:
数组
递归出口:
数组元素只有一个(或者为空)的时候
需求:
一个项目,下面有两个团队:
要求可以随意的切换数据库(mysql,Oracle),一个团队负责做mysql,一个团队负责做Oracle。
(公共接口已经做好)
但是以上解决方案需要用户每次去手动修改代码来继承不同的类。
PDO
PDO:
PHPDataObject,PHP数据对象(数据抽象层)
作用:
能够解决用户在需要使用不同的数据库的时候进行来回的切换,PDO能够自动的进行数据库的切换,而且还能将所有的有可能存在的不兼容的语法进行兼容性处理。
加载PDO
使用PDO之前必须要开启PDO扩展
1.在php.ini文件中找到PDO扩展
开启Mysqlpdo扩展
注:
如果PHP版本比较低的情况下,需要额外的去开启pdo扩展,再开启pdo对应的数据库扩展
2.重启服务器
使用PDO
PDO这一套不单只是一个类,有三个类
PDO类:
负责数据库的连接,分发还SQL语句的发送
PDOStatement类:
结果集类,专门用来出来查询的结果,还有其他功能(预处理)
PDOException类:
用异常机制处理PDO类所碰到的问题
操作数据库步骤
1.连接认证
PDO:
:
__construct($dsn,$user,$pass)
$dsn:
由两个部分构成:
数据源,数据库信息
$dsn:
mysql:
host=localhost;port=3306;dbname=project
$pdo=newPDO(‘mysql:
host=localhost;port=3306;dbname=project’,’root’,’root’);
2.组织SQL语句
3.发送SQL语句给服务器,接收执行结果
PDOStatementPDO:
:
query:
执行有结果集返回的查询语句
4.从结果集获取数据
PDOStatement:
:
fetch:
从结果集中获取一行记录
5.关闭连接
PDO没有提供关闭连接的方法
unset(PDO对象);
$pdo=null;
PDO增删改查
1.新增数据
2.修改数据
3.删除数据
4.查询数据
查询处理
在查询得到的结果集处理时,默认的使用fetch得到的是一个混合数组,可以通过方法指定参数来修改获取数据的方式。
fetch方法指定参数
关联数组
索引数组
fetchAll
自定义获取所有结果集内容
作业:
使用while循环实现所有的结果集内容的遍历。
fetchColumn
意义
1.减少代码冗余
2.提高代码执行效率
fetchObject
stdClass:
标准类,空类
$str=‘abcd’;
$o=(object)$str;//得到的对象就是stdClass对象
指定自己类
bindColumn与fetch
作用:
为了操作方便,为了弥补fetchColumn只能获取一个字段值的缺陷。
预处理
在真正执行某条SQL语句之前,先将SQL语句准备好,在执行过程中再绑定数据
语法:
准备预处理
prepare预处理名字from‘要执行的SQL语句’
执行预处理
execute预处理名字[using变量]
预处理高级使用:
可以在预处理过程中使用一些列不确定的内容。
PDO预处理
可以使用多种方式实现预处理:
指的是在绑定数据进行执行的时候,可以有多种方式。
使用数组指定预处理变量
1.准备预处理语句(发送给服务器,让服务器准备预处理语句)
PDOStatementPDO:
:
prepare:
类似exec将一条SQL语句发送给Mysql服务器
2.执行预处理:
将要操作的数据发送给预处理语句,再执行预处理语句
PDOStatement:
:
execute([$array]):
数组用来传递对应的参数
通过绑定变量
bindParam:
在执行预处理之前,将之前预处理语句所指定的变量进行赋值
bindParam只能通过变量的形式进行赋值(引用传值)
bindValue:
与bindParam一样
bindValue可以直接赋值(值传递)
bindParam与bindValue的区别
1.bindParam必须要先声明变量,再使用变量;bindValue可以直接使用值
2.bindValue是一次性的,而bindParam可以无限使用(因为使用的引用传值,一旦变量的值进行改变,那么对应的组织SQL语句时所用到的变量的值也跟着改变)
预处理语句使用原始?
代替变量
PDO事务处理
事务处理流程
1.开启事务
PDO:
:
beginTransaction
2.事务操作
所有的实务操作就是增删改
3.事务提交
PDO:
:
commit:
成功后提交数据
PDO:
:
rollback:
失败后回滚数据
注意
1.要实现事务处理必须数据表的存储引擎为InnoDB
2.事务必须完整(开启→提交)
作业:
不适用PDO的事务处理,实现模拟事务。
PDO属性设置
设置PDO在处理数据的过程中采用什么方式去处理
PDO:
:
setAttribute:
设置属性
PDO:
:
getAttribute:
获取属性
常用属性
PDO:
:
ATTR_AUTOCOMMIT:
设置当前连接Mysql服务器的客户端的SQL语句是否自动执行,默认是自动提交
PDO:
:
ATTR_CASE:
当pdo从结果集中获取数据的时候,如何处理对应的字段的名字
PDO:
:
CASE_LOWER:
将所有字段都小写显示
PDO:
:
CASE_UPPER:
所有字段都大写显示
PDO:
:
CASE_NATURAL:
原本怎么样就怎么样
PDO:
:
ATTR_ERRMODE:
错误模式,当pdo出现错误的时候到底使用哪种模式进行处理
PDO:
:
ERRMODE_SILENT:
静默模式,默认的出错了不管
PDO:
:
ERRMODE_WARNING:
警告模式,如果出错了就会报出警告
PDO:
:
ERRMODE_EXCEPTION:
异常模式,如果出错会采用异常来处理(PDOException)
PDO:
:
ATTR_PERSISTENT:
当前对Mysql服务器的连接是否是长连接
TRUE:
是长连接(长连接的使用必须要配合:
Apache(connection:
keepAlive),Mysqld)
FALSE:
默认的,非长连接
什么情况下使用长连接?
1.不同的脚本的执行间距非常短,同时每个脚本都要操作数据库(Mysql:
mysql_pconnect())
PDO异常处理
异常处理:
当PHP碰到错误的时候,会直接报错,错误处理会变得相当麻烦。
后来,当错误发生之后,会将错误信息不再直接输出,放到一个类的对象里(PDOException)
要使用PDO异常处理
1.需要将错误处理模式变成异常模式
2.所有可能出错的语句都必须放到错误捕捉语句块里
try{
//错误捕捉语句块
//凡是有可能出现错误的语句都放在这
//一旦出错会立即进入catch语句,把所有的错误信息放到PDOexception$e里面
}catch(PDOExecption$e){
//将错误信息进行处理
}
有的时候,如果数据执行没有任何错误,但是就是不符合指定的业务逻辑。
一旦出现业务逻辑错误,异常是没有办法捕捉(异常只捕捉语法错误),一般认为的去通过判断语句的执行(结果),主动抛出异常,从而结束错误程序的运行。
语法:
thrownewPDOException;
封装自己PDO
见代码:
MyPDO.class.php
反射
反射就是将其他类的结构给反应出来,从而可以对类的结构进行了解便于对类的使用。
Reflection。
ReflectionClass:
:
export(要反射的类名)
ReflectionClass类
介绍几个方法
getConstants:
获取常量
getProperties:
获取所有属性
getMethods:
获取所有方法