编程之路之数据库(十)- PDO详解

 

一、PDO概述

1、PDO简介

  • PDO就是PHP Data Object的简称。
  • PDO主要用来代替数据库操作类。
  • PDO就是一系统类。
  • PHP同时可以操作多个数据库。例如:MySQL、SQL Server、Oracle、Db2等。
  • PDO扩展为PHP访问数据库定义了一个轻量级的、一致性的接口,无论使用什么数据库,都可以通过一致的函数(方法)来执行查询和获取数据。
  • PDO是一个数据库访问抽象层,作用是统一各种数据库的访问接口,与MYSQL和MSSQL函数库相比,PDO让跨数据库的使用更具亲和力,与ADODB和MDB2相比,PDO更高效.
  • 有了PDO,您不必再使用mysql_*函数、oci_*函数或者mssql_*函数,也不必再为它们封装数据库操作类,只需要使用PDO接口中的方法就可以对各种数据库进行操作。在选择不同的数据库时,只修改PDO的DSN即可。

 

2、PDO访问流程图

 

3、开启PDO扩展

修改PHP的配置文件php.ini代码如下:

 

 

4、PDO连接MySQL

  • 描述:创建一个表示数据库连接的 PDO 对象
  • 语法:PDO::__construct ( string $dsn [, string $username [, string $password ]] )
  • 参数:
    1. $dsn数据源名称,包含了连接数据库的基本信息;
      1. 格式:$dsn = “dbtype: dbname=数据库名; port=端口号; host=主机名; charset=字符集
      2. dbtype参数:代表要连接的数据库的类型,例如:mysql、mssql、oracle等。
      3. host参数:数据库服务器地址,可以域名,也可以是IP地址;
      4. port参数:数据库端口号,mysql的端口号3306;
      5. dbname参数:数据库名称;
      6. charset参数:字符集。
    2. $username数据库的用户名;
    3. $password数据库的用户密码。

 

二、PDO对象常用方法

 

1、exec()

  • 描述:执行一条 SQL 语句,并返回受影响的行数
  • 语法:int PDO::exec ( string $statement )
  • 注意:执行SELECT语句,将返加0

 

2、query()

  • 描述:执行SELECT、SHOW语句,并返回一个结果集对象(PDOStatement)
  • 语法:public PDOStatement PDO::query ( string $statement )

 

3、lastInsertId()

  • 描述:获取插入记录的ID号
  • 语法:string PDO::lastInsertId ( void )

 

4、setAttribute()

  • 描述:设置属性
  • 语法:bool PDO::setAttribute ( int $attribute , mixed $value )
  • 参数:
    1. PDO::ATTR_CASE:强制列名为指定的大小写。
      1. PDO::CASE_LOWER:强制列名小写。
      2. PDO::CASE_NATURAL:保留数据库驱动返回的列名。
      3. PDO::CASE_UPPER:强制列名大写。
    2. PDO::ATTR_ERRMODE:错误报告。
      1. PDO::ERRMODE_SILENT: 仅设置错误代码。
      2. PDO::ERRMODE_WARNING: 引发 E_WARNING 错误
      3. PDO::ERRMODE_EXCEPTION: 抛出 exceptions 异常。
    3. PDO::ATTR_DEFAULT_FETCH_MODE: 设置默认的提取模式。
      1. PDO::FETCH_ASSOC:返回一个索引为结果集列名的数组
      2. PDO::FETCH_BOTH(默认):返回一个索引为结果集列名和以0开始的列号的数组
      3. PDO::FETCH_NUM:返回一个索引为以0开始的结果集列号的数组

 

三、PDOStatement结果集对象常用方法

 

1、fetch()

  • 描述:从结果集中获取一行,并将指针下移。
  • 语法:mixed PDOStatement::fetch ([ int $fetch_style ] )
  • 参数:
    1. PDO::FETCH_ASSOC:返回一个索引为结果集列名的数组
    2. PDO::FETCH_BOTH(默认):返回一个索引为结果集列名和以0开始的列号的数组
    3. PDO::FETCH_NUM:返回一个索引为以0开始的结果集列号的数组

 

2、fetchAll()

  • 描述:返回一个包含结果集中所有行的数组
  • 语法:array PDOStatement::fetchAll ([ int $fetch_style] )

 

3、fetchColumn()

  • 描述:从结果集中返回单独的一列。
  • 语法:string PDOStatement::fetchColumn ([ int $column_number = 0 ] )
  • 参数:$column_number是列的索引值,默认为0。

 

4、rowCount()

  • 描述:返回受上一个 SQL 语句影响的行数
  • 语法:int PDOStatement::rowCount ( void )

 

四、PDO错误处理模式

1、错误处理概述

  • PDO的错误报告模式有三种:静默模式、警告模式、异常模式。
  • 静默模式(silent):当PDO执行SQL语句有错时,不显示任何错误(默认)。
  • 警告模式(warning):当PDO执行SQL语句有错时,用PHP的错误等级来报告信息。
  • 异常模式(exception):当PDO执行SQL语句有错时,先抛出异常,再捕获异常。

 

2、静默模式(silent)

 

获取错误信息函数PDO::errorCode()PDO::errorInfo

  • PDO::errorCode():获取错误状态码。如果状态码为为”00000”,说明没有错误。
  • PDO::errorInfo():获取描述性的信息。

 

3、警告模式

要想报告”警告模式错误”,必须先设置错误的报告模式。

 

4、异常模式

要想报告”异常模式错误”,必须先设置错误的报告模式。

 

 

五、SQL语句预处理

1、SQL语句的执行过程

  • SQL语句的执行,分成两个阶段:编译和执行
  • 如果SQL语句,是第1次执行,先编译再执行编译过程十分复杂,耗用系统资源,相对不太安全
  • 如果SQL语句(即相同的SQL语句),是第2次执行,直接从缓存中读取无疑执行效率是最高的,也是比较安全的,可以有效避免SQL注入等安全问题;

 

2、PDO预处理的步骤

  • 先提取相同结构的sql部分!(将数据部分,可变的部分去掉)
  • 编译这个相同的结构!将编译结果保存!
  • 再将不同的数据部分进行替换!
  • 执行即可!

3、制作相同结构的SQL语句

 

4、预编译相同结构的SQL语句

 

5、给占位符绑定真正的数据

 

6、PDOStatement::execute()

  • 描述:执行绑定数据的SQL语句
  • 语法:bool PDOStatement::execute ( void )

我是小咖

发个邀请:
如果你正好想学习php,可以与我一起交流,我的VX:feilueze333。下面资料免费赠送。

 

 

 

 


版权声明:本文为weixin_42530572原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>