PHP新版中推荐的基于面向对象操作数据库服务器的方式!
开启PDO_mysql相关扩展:
Apache restart
基本使用步骤
连接,认证,发送SQL,等待mysql服务器的执行结果,处理执行结果
构造方法需要4个参数:
$dsn: Data Source Name数据源名称,需要的数据来源的描述
$username
$password
$driver_options 驱动选项,对应当前数据库服务器一些特定的初始化工作。
测试:
Pdo对象方法query(SQL)完成执行SQL
逻辑上,返回的是结果集,被PDOStatememt类对象封装管理。
Tip:PDOStatement类,称之为PDO语句对象,SQL执行完(处理完)产生的结果对象。
利用该结果对象,获得我们需要的数据:
默认返回关联和索引的集合,可以传递参数,进行配置:
错误信息,包含错误信息的数组。
错误代码
当SQL执行过程中,失败,会产生错误:
开启事务
回滚事务
提交事务
判断是否处于事务中
最后形成的auto_increment字段的值。
又一个执行SQL的方法。
区别于query(),返回值类型不同。Exec()返回值类型为整型。(query()返回的是对象类型)。
该返回的整数,表示当前执行SQL所影响的记录数。
可见:
Query(), 执行查询类,show,select,desc
Exec(), 非查询类,insert,delete,update,DDL
注意,影响的记录数可能为0.但是不意味着执行失败!
使用PDO,实现与mysqlDB这个DAO对象外部操作一致的另外一种DAO的实现,可以做到,模型切换DAO,是不需要更改模型内的任何代码(热插拔,无缝切换)
增加DAO的操作接口(I_DAO),使所有DAO的定义(mysql扩展,PDO扩展)都实现相同的DAO操作接口(I_DAO)
一条SQL的执行,MySQL分成两大步骤:
1, 编译;2,执行
如果:
连续执行多条结构相同的SQL:
编译的中间结果(语法树)应该是一致的。
应该将相同的结构,统一编译,每次使用不同的数据执行即可!
预编译:指的是预先编译SQL的结构的一种执行SQL的方法。
语法实现:
$PDOStatement = $pdo->prepare(SQL的结构);
SQL结构中的数据部分,可以使用问好,或者冒号标签的语法来占用:
$PDOStatement->bindValue()
$PDOStatement->execute();
循环执行:
预编译的优点二:
更好的防止SQL注入,是因为预编译时,不需要用户的数据参与。编译时,结构固定,导致用户数据不能影响到SQL的结构。
普通的执行方法:
$pdo->query();
$pdo->exec()
如果需要防止SQL注入,需要人为的转义用户数据,使用的方式是$pdo->quote()方法。转义并使用引号包裹。
使用PDOStatement->execute()方法执行失败时,错误信息由以上两个方法获得。
允许传递参数,表示获得第一条记录的第几个字段的值。
getOne()
getRow()
获取一条后,可以向后移动结果集指针。
getAll()
统计处理的记录数:
影响了多少行(增删改)
结果集中存在多少行(查)。
释放结果集光标。(建议fetch之后,手动释放)
PDO:PHP Data Object。
PDO是数据库抽象层的一种。
将多种数据库的操作,抽象出来,使用同一种语法完成。