zoukankan      html  css  js  c++  java
  • 20150113--PDO增删改查+封装PDO类-02

    预处理

    预处理:提前处理,在一次数据库连接过程中,可以提前将要执行的SQL语句发送给服务器,

    预处理语法

    1. 准备预处理:将要执行的SQL语句起个别名然后发送给服务器。

    prepare 预处理名字 from ‘要执行的SQL语句’;

    clip_image002

    2. 执行预处理。

    execute 预处理名字;

    clip_image004

    预处理使用参数

    1. 准备预处理:有些地方可以事先使用占位符“?”来代替真实数据。

    clip_image006

    2. 如果预处理有参数的话,那么必须携带参数。参数必须是通过变量传入。

    execute 预处理名字 using 变量;

    clip_image008

    预处理意义

    1. 节省带宽(执行一次较长的SQL语句,每次使用的时候都只需要提供变量)

    PDO预处理

    预处理执行流程

    1. 发送预处理语句

    clip_image010

    2. 执行预处理

    在PDO使用预处理的过程中,一个PDOStatement类的对象只能同时操作一个预处理,所以要使用多个预处理,必须在PDO::prepare()方法的返回值的,使用不同的变量来保存对象。

    PDOStatement::execute():执行预处理

    2.1 预处理绑定参数1:使用参数数组

    采用数组的形式来给预处理赋值

    clip_image012

    2.2 使用bindParam来绑定参数

    bindParam():就是给一个变量绑定一个值

    clip_image014

    2.3 使用bindValue来绑定参数

    bindValue():与bindParam基本一样

    clip_image016

    bindParam&bindValue

    bindParam胜了bindValue:使用的引用传值方式进行传参,参数可以循环利用。

    利用参数的修改可以直接修改execute所执行的结果。

    问号占位符

    clip_image018

    绑定参数

    clip_image020

    数组绑定参数

    clip_image022

    注意:在使用PDO进行预处理的时候,尽量不要使用问号占位符,使用变量(:名字)

    PDO事务处理

    PDO的事务处理完全遵照mysql下面的事务处理来实现,只是将不同的动作封装到不同的方法中。

    事务流程

    1. 开启事务

    clip_image024

    2. 事务处理:进行多次有关联的写操作

    clip_image026

    3. 结束事务

    a) 成功:commit方法

    clip_image028

    b) 失败:rollback方法

    clip_image030

    注意:要支持事务,必须要确保数据库的存储引擎是InnoDB。

    PDO属性

    PDO属性不是指的PDO类的对象里面所保存的属性,而是指的PDO对象在操作数据的过程中应该按照某些指定的情况去处理数据。

    PDO属性不是真正的PDO类对象的属性,是数据库的属性

    对于属性操作:PDO提供两个方法,getAttribute方法获取属性的值,和setAttribute方法设置属性的值。

    这些属性都是以属性名和属性值的键值对的形式存在

    PDO::ATTR_AUTOCOMMIT:是否自动提交,默认都是自动提交,值是1

    clip_image032

    PDO::ATTR_CASE,代表数据库返回数据的时候,字段的大小写,默认是与数据库字段设计的大小写一致PDO::CASE_NATURAL

    clip_image034

    PDO::CASE_LOWER:全部字段小写(字段名)

    PDO::CASE_UPPER:全部大写

    PDO::CASE_NATURAL,默认自然的,不改变

    修改属性

    clip_image036

    PDO::ATTR_ERRMODE,mysql对出错的处理模式

    PDO::ERRMODE_SILENT:默认的,静默模式,出错不会报错

    PDO::ERRMODE_WARNING:警告模式,出错会给出一个警告

    PDO::ERRMODE_EXCEPTION:异常模式,出错会抛出一个异常

    clip_image038

    PDO::ATTR_PERSISTENT,连接的持久性,默认的是false,短连接

    TRUE:长连接,脚本执行结束,如果换一个脚本依然需要操作数据库,连接不会中断

    条件:mysql服务器开启长连接(默认不允许),Apache支持长连接(需要配置)

    FALSE:短连接,脚本执行结束一定会释放(断开)连接资源

    PDO异常

    异常其实错误,异常处理是一种将错误放到一个对应的对象里面,然后通过对象去对错误进行操作一种模式。

    异常处理的实现语法

    将所有有可能出现错误的语句,9都放到一个可以抓取异常的上下文:try;其次需要一个指定类型的数据类的对象来捕获异常,并进行异常处理:catch

    try{

    //所有有可能出错的语句,一旦出现就会立马进入到catch里面,而且将所有的错误信息放到异常处理类对应的对象里面

    }catch(异常处理类 对象名字){

    //错误处理的方式

    }

    要使用异常模式来抓取PDO可能出现的错误,那么必须将错误处理模式设置成异常模式

    clip_image040

    通常的处理方式

    clip_image042

    主动抛出异常:throw new PDOException

    clip_image044

    反射(不是今天的重点)

    在程序中,反射是在通过获得一个类,让类内部的结构给反射出来,能将类内部的属性,方法,常量给全部显示处理。(不会包含方法体)。

    反射意义:将类内部结构展示给程序员看,程序员看了结构之后能够更好的去操作类。

    在php中有一个类:ReflectionClass,用于反射的操作类

    该类中有一个静态方法:export()能够将一个对应的类的结构给反射出来(打印)

    clip_image046

    不单只可以通过反射类ReflectionClass来查看类的内部结构,还可以通过对象的形式去获取获取对应的数据信息。里面有三个方法,能够帮助我们去更好的了解一个类的使用。

    getProperties:获取所有的属性

    getMethods:获取所有的方法

    getConstants:获取所有的常量

    new ReflectionClass(‘类名’);

    clip_image048

    获取所有的方法:getMethods

    clip_image050

    获取所有属性:getProperties

    clip_image052

    获取常量:getConstants

    clip_image054

    封装PDO

    把PDO一些不方便的地方,进行再次封装,变的方便

    见代码:MyPDO.class.php

    作业:完善MyPDO类:增删改查都有(建议:对外接口做成protected)

  • 相关阅读:
    话说打工
    Linux系统信息查看命令大全
    基于LNMP的Zabbbix之Zabbix Server源码详细安装,但不给图
    基于LNMP的Zabbbix之PHP源码安装
    php --with-mysql=mysqlnd
    LeetCode:Binary Tree Level Order Traversal
    tslib-触摸屏校准
    A
    【雷电】源代码分析(二)-- 进入游戏攻击
    能够替代浮动的inline-block
  • 原文地址:https://www.cnblogs.com/lifushan/p/5419383.html
Copyright © 2011-2022 走看看