上篇文章学习了数组的遍历https://www.cwhello.com/10789.html
下面做些总结。
复合数据的保存:数组和对象
保存文件:对符复合数据进行序列化保存
读取文件:反序列化得到数据类型
对象反序列化必须要先加载对应的类
对象序列化的时候资源是不能序列化的:__sleep在序列化之前先调用,__wakeup在反序列化之后调用
遍历对象:普通遍历对象,遍历对象的公有属性
对象对应的类必须实现iterator接口:current,key,next,rewind,valid,五个方法没有顺序关系
foreach的顺序:①rewind,②valid,③key,④current,⑤next,后面就是重复②③④⑤,直到退出,退出前的最后一个方法②
排序算法
选择排序:每一次内存循环得到最小值的小标,内层循环之外进行一次交换
快速排序:递归调用,每次取出需要排序数组的一个元素,将较小的放到左边数组,较大的放到右边数组,最后返回左中右的合并
PDO
PDO:PHP数据对象
PDO能够灵活的去切换数据库,而不需要修改很多源代码。
PDO操作数据库原理
如何使用PDO?
PDO不是PHP自有的东西,需要通过加载扩展来实现
如果是低版本的PHP还需要加载一个额外的PDO扩展
-
重启Apache
-
验证PDO-MYSQL扩展是否加载成功
phpinfo()
成功
PDO是如何工作的?
-
连接认证
new PDO($dsn,$user,$password)
$dsn:数据库类型mysql:host=host;Port=port;dbname=dbname
$user:用户名
$password:用户密码
-
发送SQL语句,得到SQL执行结果
-
解析执行结果
-
关闭连接
pdo没有提供关闭连接的方法,所以关闭连接的方式是释放pdo对象
PDO三大类
PDO类:专门用来连接数据库和发送SQL语句操作,事务处理
PDOStatement类:用来处理结果集,用来获取用户查询的数据,预处理
PDOException类:PDO异常处理类,捕获异常
PDO类
exec:执行SQL语句,使用exec执行的sql语句是没有返回值(结果集)
query:执行SQL语句,有返回结果集的语句
PDO增删改查
新增
更新
删除
查询
课堂作业:
-
写一个函数,函数参数是传入一个类名,函数要接收类名,到指定的地方去加载对应的类文件(DB.class.php),该函数返回一个对象
function getObject($className){
if(is_file("./$className.class.php")){
//加载
require_once "./$className.class.php";
return new $className;
}
return false;
}
//调用函数
define('DB','DB');
$db = DB;
$db = getObject($db);//undefined constant DB
$db->getRow();
-
使用PDO做一套增删改查
处理结果集
利用PDO::query方法得到一个结果集的对象
PDOStatement类
从结果集中获得纪录
使用PDOStatement对象来去访问方法,从而得到所需要的数据
获取结果集的行数和列数
fetch:获得结果集中一行记录,将指针下移
修改fetch参数,获得索引或者关联数组
得到关联数组
得到索引数组
fetchAll:获得结果集中所有记录
fetchColumn:返回某一行中指定列的字段值,指定列只能使用索引不能使用关联(字段名字)
fetchObject:获取一行记录,把记录的字段当做对象的属性,保存成类的一个对象。
指定类对象
可以设置fetch的模式
bool PDOStatement::setFetchMode ( int $mode ):可以设定fetch按照什么模式去获取数据
预处理
提前处理,先将SQL语句发送给服务器,但是不执行,返回一个标记,在之后需要执行的时候,直接使用标记,并且还能传输数据。
预处理语法:prepare 预处理名字 from '需要执行的SQL语句';
执行预处理语法:execute 预处理名字
预处理的作用
-
减少代码量
-
减少网络带宽的使用
PDO实现预处理
需求:向pro_student表里插入20条数据
预处理还允许在执行前进行变量绑定,进行索引绑定
预处理语句:prepare selectStudent from 'select * from pro_student where id=?';
执行前使用PDOStatement对象的bindPram和bindValue来对问号进行赋值
执行预处理:execute()
bindParam的使用
bindValue的使用
bindParam和bindValue的区别
-
bindParam和bindValue都能够为预处理绑定数据
-
bindParam能够在每一次执行execute之前去找对应的变量名进行重新绑定,而bindValue不会重新绑定,一般不会使用bindValue
PDO事务处理
开启事务:bool PDO::beginTransaction ( void )
提交事务:bool PDO::commit ( void )
回滚事务:bool PDO::rollBack ( void )
bindColumn:从一条记录中找到指定的字段的值,把该值绑定到对应的变量上
意义:有时候不大方便使用数组的情况下,可以将一个获取到的记录里的字段值分别分配到绑定的变量上
PDO属性设置和访问
PDO::ATTR_AUTOCOMMIT(1,0):1代表开启自动提交,0代表执行任何SQL语句都需要手动提交
PDO::ATTR_CASE:字段名称的大小写
PDO::CASE_LOWER:字段全部小写
PDO::CASE_UPPER:字段全部大写
PDO::CASE_NATURAL:原来字段的大小
PDO::ATTR_ERRMODE:PDO处理错误的模式
PDO::ERRMODE_SILENT:静默模式,出错了不处理
PDO::ERRMODE_WARNING:警告模式,出错了给出一个警告
PDO::ERRMODE_EXCEPTION:异常模式,出错了交给异常类处理
PDO::ATTR_PERSISTENT:连接持久化
TRUE:持久连接,在脚本执行结束后,再执行另外的脚本的时候,数据库的连接不会断。如果要实现持久连接,需要mysql服务器的支持,还要Apache支持长连接
FALSE:关闭连接,只要当前脚本执行结束,那么就断开连接
PDO异常处理
异常一般是通过一个类的对象(异常类)将错误信息进行捕捉,捕捉到到之后,存放到异常对象里。
异常常用的语法就三个:
try{
//在try的语句里去捕捉异常
//所有有可能出现错误的代码都写在这里
}catch(){
//一旦在try语句块里捕捉到里异常就会执行catch里的语句块
}
throw:抛出异常,在某些情况下,系统抓不到错误,但是逻辑可以判断出错,可以手动的叫异常抛出,从而去执行catch里的语句块
主动抛出异常:throw
注意:如果想使用PDOException,必须要将PDO的错误处理模式设置成异常模式才行。
PHP本身也支持异常,有一个异常类Exception
反射
Reflection,将一个类里面的结构给显示出来。
反射类:ReflectionClass,将其他类的结构跟反射出来,同时还能获得对应的类里面的所有的属性,方法
作用
-
在不知道类的情况的时候,可以通过反射来获得类里面的所有属性和方法
-
通过反射来对类进行修改
export:静态方法,将一个类结构全部反映出来
反射类内部(new ReflectionClass(类)
getConstants:获取所有的常量,返回一个数组
getProperties:获取所有属性,返回一个数组
getMethods:获取所有方法,返回一个数组
封装PDO类
class MyPDO{
}
本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/263880.html
如有侵犯您的合法权益请发邮件951076433@qq.com联系删除