php pdo内置类详解

分享于:2017-10-04 16:45:31

1.png


PHP新版推荐的基于面向对象操作数据库服务器的方式!

 

开启PDO_mysql相关扩展:


1.png


Apache restart

 

基本使用步骤

连接,认证,发送SQL等待mysql服务器的执行结果,处理执行结果

 

实例化PDO对象

 

构造方法需要4个参数:

$dsn: Data Source Name数据源名称需要的数据来源的描述


1.png


$username

$password

$driver_options 驱动选项,对应当前数据库服务器一些特定的初始化工作。


1.png


测试


1.png



发送SQL服务器等待执行SQL结果

Pdo对象方法query(SQL)完成执行SQL


1.png


处理执行结果

1.png



逻辑上,返回的是结果集,被PDOStatememt类对象封装管理。

 

TipPDOStatement类,称之为PDO语句对象,SQL执行完(处理完)产生的结果对象。

 

利用该结果对象,获得我们需要的数据


1.png


默认返回关联和索引的集合,可以传递参数,进行配置:


1.png


PDO对象的常用方法

errorInfo()

错误信息包含错误信息的数组。


errorCode()

错误代码

SQL执行过程中,失败,会产生错误


1.png


1.png


beginTransaction();

开启事务

rollback();

回滚事务

commit();

提交事务

inTransaction();

判断是否处于事务

 

lastInsertID()

最后形成的auto_increment字段的值。


1.png


Exec()

又一个执行SQL的方法。

区别于query(),返回值类型不同。Exec()返回值类型为整型。(query()返回的是对象类型)

返回的整数,表示当前执行SQL所影响的记录数。

可见

Query(), 执行查询类,showselectdesc

Exec(), 查询类,insertdeleteupdateDDL


1.png


注意,影响的记录数可能为0.但是不意味着执行失败!


1.png


项目中对PDO的使用

使用PDO,实现与mysqlDB这个DAO对象外部操作一致另外一种DAO实现,可以做到,模型切换DAO,是不需要更改模型内的任何代码(热插拔,无缝切换)

 

增加DAO的操作接口I_DAO,使所有DAO定义mysql扩展,PDO扩展)实现相同DAO操作接口I_DAO


1.png


1.png


1.png


1.png



预处理(预编译)的执行方式

一条SQL的执行,MySQL分成两大步骤:

1, 编译2执行

 

如果

连续执行多条结构相同的SQL

编译的中间结果语法树)应该是一致的。

应该将相同的结构,统一编译,每次使用不同的数据执行即可!

预编译:指的是预先编译SQL的结构的一种执行SQL的方法。

 

语法实现:


编译统一的结构

$PDOStatement = $pdo->prepare(SQL的结构);

SQL结构中的数据部分,可以使用问好,或者冒号标签的语法来占用:


1.png


1.png


绑定数据中间编译结果

$PDOStatement->bindValue()


1.png


执行

$PDOStatement->execute();


1.png


循环执行:


1.png


预编译的优点二:

更好的防止SQL注入是因为预编译时,不需要用户的数据参与。编译时结构固定,导致用户数据不能影响到SQL的结构。

 

 

普通的执行方法

$pdo->query();

$pdo->exec()

如果需要防止SQL注入,需要人为的转义用户数据,使用的方式是$pdo->quote()方法转义并使用引号包裹。

 

PDOStatement对象的常用方法

errorInfo()

errorCode()

使用PDOStatement->execute()方法执行失败时,错误信息以上两个方法获得。


fetchColumn(index=0)

允许传递参数表示获得第一条记录的第几个字段的值。

getOne()

Fetch()

getRow()

获取一条后,可以向后移动结果集指针。

FetchAll()

getAll()

 

rowCount();

统计处理的记录数

影响了多少行增删改)

结果集中存在多少行查)。

 

closeCursor();

释放结果集光标。(建议fetch之后,手动释放)

 

数据据抽象&驱动

PDOPHP Data Object

PDO是数据库抽象层的一种。

多种数据的操作,抽象出来,使用同一种语法完成。

1.png

1.png