重蔚自留地PHP学习第46天——通过PDO连接数据库

上篇文章学习了数组的遍历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操作数据库原理

重蔚自留地PHP学习第46天——通过PDO连接数据库

如何使用PDO?

PDO不是PHP自有的东西,需要通过加载扩展来实现

  1. php.ini中,加载pdo-mysql的扩展

重蔚自留地PHP学习第46天——通过PDO连接数据库

如果是低版本的PHP还需要加载一个额外的PDO扩展

  1. 重启Apache
  2. 验证PDO-MYSQL扩展是否加载成功

phpinfo()

重蔚自留地PHP学习第46天——通过PDO连接数据库

成功

重蔚自留地PHP学习第46天——通过PDO连接数据库

PDO是如何工作的?

  1. 连接认证

new PDO($dsn,$user,$password)

$dsn:数据库类型mysql:host=host;Port=port;dbname=dbname

$user:用户名

$password:用户密码

重蔚自留地PHP学习第46天——通过PDO连接数据库

  1. 发送SQL语句,得到SQL执行结果

重蔚自留地PHP学习第46天——通过PDO连接数据库

  1. 解析执行结果

重蔚自留地PHP学习第46天——通过PDO连接数据库

  1. 关闭连接

pdo没有提供关闭连接的方法,所以关闭连接的方式是释放pdo对象

重蔚自留地PHP学习第46天——通过PDO连接数据库

PDO三大类

PDO类:专门用来连接数据库和发送SQL语句操作,事务处理

PDOStatement类:用来处理结果集,用来获取用户查询的数据,预处理

PDOException类:PDO异常处理类,捕获异常

重蔚自留地PHP学习第46天——通过PDO连接数据库

PDO类

重蔚自留地PHP学习第46天——通过PDO连接数据库

exec:执行SQL语句,使用exec执行的sql语句是没有返回值(结果集)

query:执行SQL语句,有返回结果集的语句

PDO增删改查

新增

重蔚自留地PHP学习第46天——通过PDO连接数据库

更新

重蔚自留地PHP学习第46天——通过PDO连接数据库

删除

重蔚自留地PHP学习第46天——通过PDO连接数据库

查询

重蔚自留地PHP学习第46天——通过PDO连接数据库

课堂作业:

  1. 写一个函数,函数参数是传入一个类名,函数要接收类名,到指定的地方去加载对应的类文件(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();

  1. 使用PDO做一套增删改查

处理结果集

利用PDO::query方法得到一个结果集的对象

PDOStatement类

重蔚自留地PHP学习第46天——通过PDO连接数据库

从结果集中获得纪录

使用PDOStatement对象来去访问方法,从而得到所需要的数据

获取结果集的行数和列数

重蔚自留地PHP学习第46天——通过PDO连接数据库

fetch:获得结果集中一行记录,将指针下移

重蔚自留地PHP学习第46天——通过PDO连接数据库

修改fetch参数,获得索引或者关联数组

得到关联数组

重蔚自留地PHP学习第46天——通过PDO连接数据库

得到索引数组

重蔚自留地PHP学习第46天——通过PDO连接数据库

fetchAll:获得结果集中所有记录

重蔚自留地PHP学习第46天——通过PDO连接数据库

fetchColumn:返回某一行中指定列的字段值,指定列只能使用索引不能使用关联(字段名字)

重蔚自留地PHP学习第46天——通过PDO连接数据库

fetchObject:获取一行记录,把记录的字段当做对象的属性,保存成类的一个对象。

重蔚自留地PHP学习第46天——通过PDO连接数据库

指定类对象

重蔚自留地PHP学习第46天——通过PDO连接数据库

可以设置fetch的模式

bool PDOStatement::setFetchMode ( int $mode ):可以设定fetch按照什么模式去获取数据

重蔚自留地PHP学习第46天——通过PDO连接数据库

预处理

提前处理,先将SQL语句发送给服务器,但是不执行,返回一个标记,在之后需要执行的时候,直接使用标记,并且还能传输数据。

预处理语法:prepare 预处理名字 from '需要执行的SQL语句';

重蔚自留地PHP学习第46天——通过PDO连接数据库

执行预处理语法:execute 预处理名字

重蔚自留地PHP学习第46天——通过PDO连接数据库

预处理的作用

  1. 减少代码量
  2. 减少网络带宽的使用

重蔚自留地PHP学习第46天——通过PDO连接数据库

PDO实现预处理

需求:向pro_student表里插入20条数据

重蔚自留地PHP学习第46天——通过PDO连接数据库

预处理还允许在执行前进行变量绑定,进行索引绑定

预处理语句:prepare selectStudent from 'select * from pro_student where id=?';

执行前使用PDOStatement对象的bindPram和bindValue来对问号进行赋值

执行预处理:execute()

bindParam的使用

重蔚自留地PHP学习第46天——通过PDO连接数据库

bindValue的使用

重蔚自留地PHP学习第46天——通过PDO连接数据库

bindParam和bindValue的区别

  1. bindParam和bindValue都能够为预处理绑定数据
  2. bindParam能够在每一次执行execute之前去找对应的变量名进行重新绑定,而bindValue不会重新绑定,一般不会使用bindValue

PDO事务处理

开启事务:bool PDO::beginTransaction ( void )

提交事务:bool PDO::commit ( void )

回滚事务:bool PDO::rollBack ( void )

重蔚自留地PHP学习第46天——通过PDO连接数据库

bindColumn:从一条记录中找到指定的字段的值,把该值绑定到对应的变量上

重蔚自留地PHP学习第46天——通过PDO连接数据库

意义:有时候不大方便使用数组的情况下,可以将一个获取到的记录里的字段值分别分配到绑定的变量上

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里的语句块

重蔚自留地PHP学习第46天——通过PDO连接数据库

主动抛出异常:throw

重蔚自留地PHP学习第46天——通过PDO连接数据库

注意:如果想使用PDOException,必须要将PDO的错误处理模式设置成异常模式才行。

PHP本身也支持异常,有一个异常类Exception

反射

Reflection,将一个类里面的结构给显示出来。

反射类:ReflectionClass,将其他类的结构跟反射出来,同时还能获得对应的类里面的所有的属性,方法

作用

  1. 在不知道类的情况的时候,可以通过反射来获得类里面的所有属性和方法
  2. 通过反射来对类进行修改

export:静态方法,将一个类结构全部反映出来

重蔚自留地PHP学习第46天——通过PDO连接数据库

反射类内部(new ReflectionClass(类)

重蔚自留地PHP学习第46天——通过PDO连接数据库

getConstants:获取所有的常量,返回一个数组

重蔚自留地PHP学习第46天——通过PDO连接数据库

getProperties:获取所有属性,返回一个数组

getMethods:获取所有方法,返回一个数组

重蔚自留地PHP学习第46天——通过PDO连接数据库

封装PDO类

class MyPDO{

}

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/263880.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
重蔚的头像重蔚管理团队
上一篇 2023年5月21日 08:30
下一篇 2023年5月22日 05:24

相关推荐

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息