Php Data Object数据库抽象层(PDO)
1、1.什么是PDO?
Php Data Object PHP数据对象,他是数据库抽象层的一种.
2.什么是数据库抽象层?
马云, 淘宝的最大股东. PHP+mysql架构~
马云作为一个暴发户而言. MYSQL太贱掉价~不想用了,该数据库,改成Oralce数据库.
需要做三件事情:
1.数据库迁移
2.修改程序中所有链接MYSQL的代码,必须修改为Oracle.
3.调试程序.
作没钱了... 再换数据库...NoSQL类型的数据库,redis...
需要做三件事情:
1.数据库迁移
2.修改程序中所有链接MYSQL的代码,必须修改为Oracle.
3.调试程序.
马云又想尝试一下新的感觉? 再换一个数据库DB2数据库..
需要做三件事情:
1.数据库迁移
2.修改程序中所有链接MYSQL的代码,必须修改为Oracle.
3.调试程序.


2、为了解决网站迁移问题和同一个站点同时使用多种数据的问题的,我们发明了一个新的东西:数据库抽象层:

3、目前市面上大部分的数据库使用数据库抽象层都可以链接并且操作.
PDO不是数据库抽象层(概念不相等),pdo只是数据要库抽象层的一种.
为啥子要学习PDO捏?数据库抽象层有好多种啊.....
1.PDO是以扩展模块的形式直接打入PHP系统的,模块化方式效率较高.
2.官方推荐使用PDO作用程序的抽象层.
3.PDO在未来的版本中会默认开启.
4.Made In China 中国人开发的模块~.
1.开启PDO支持?
1.开启PDO的开关,配置文件中 extension=php_pdo.dll 去掉前面的分号. 高版本没有该选项(默认开启了~)
2.开启PDO支持的数据库模块 extension=php_pdo_mysql.dll 去掉前面的分号(需要操作哪些数据库就开哪些)
3.如果以上操作无效?
A没有重启服务.
B对应的扩展DLL文件不存在....
去官方网站下载一个同版本的扩展dll文件,放在php的ext文件夹之下
C程序损坏.(apache损坏或者PHP损坏)
4、pdo的类:
PDO {
__construct( string $dsn [, string $username [, string $password [, array $driver_options ]]] ) 构造方法
boolbeginTransaction( void ) 开启事务
boolcommit( void ) 提交操作
mixederrorCode( void ) 错误编号
arrayerrorInfo( void ) 错误信息
intexec( string $statement ) 执行增删改操作
mixedgetAttribute( int $attribute ) 获取当前属性设置
arraygetAvailableDrivers( void ) 获取当前PDO支持的数据库
boolinTransaction( void ) 检测是否处于事务当中
stringlastInsertId([ string $name = NULL ] ) 获取最后插入的自增ID
PDOStatementprepare( string $statement [, array $driver_options = array() ] ) 准备预处理对象
PDOStatementquery( string $statement ) 执行查询操作
stringquote( string $string [, int $parameter_type = PDO::PARAM_STR ] ) pdo的字符转义
boolrollBack( void ) 事务回滚
boolsetAttribute( int $attribute , mixed $value ) 设置相关属性
}
PDO预处理类
PDOStatement implements Traversable {
/* 属性 */
readonly string$queryString;
/* 方法 */
boolbindColumn( mixed $column , mixed &$param [, int $type [, int $maxlen [, mixed $driverdata ]]] )
boolbindParam( mixed $parameter , mixed &$variable [, int $data_type = PDO::PARAM_STR [, int $length [, mixed $driver_options ]]] )
boolbindValue( mixed $parameter , mixed $value [, int $data_type = PDO::PARAM_STR ] )
boolcloseCursor( void )
intcolumnCount( void )
booldebugDumpParams( void )
stringerrorCode( void )
arrayerrorInfo( void )
boolexecute([ array $input_parameters ] )
mixedfetch([ int $fetch_style [, int $cursor_orientation = PDO::FETCH_ORI_NEXT [, int $cursor_offset = 0 ]]] )
arrayfetchAll([ int $fetch_style [, mixed $fetch_argument [, array $ctor_args = array() ]]] )
stringfetchColumn([ int $column_number = 0 ] )
mixedfetchObject([ string $class_name = "stdClass" [, array $ctor_args ]] )
mixedgetAttribute( int $attribute )
arraygetColumnMeta( int $column )
boolnextRowset( void )
introwCount( void )
boolsetAttribute( int $attribute , mixed $value )
boolsetFetchMode( int $mode )
}
PDO异常处理类
PDOException extends RuntimeException {
/* 属性 */
publicarray$errorInfo;
protectedstring$message;
protectedstring$code;
/* 继承的方法 */
finalpublicstringException::getMessage( void )
finalpublicExceptionException::getPrevious( void )
finalpublicintException::getCode( void )
finalpublicstringException::getFile( void )
finalpublicintException::getLine( void )
finalpublicarrayException::getTrace( void )
finalpublicstringException::getTraceAsString( void )
publicstringException::__toString( void )
finalprivatevoidException::__clone( void )
}
5、pdo可以获取的相关属性
· PDO::ATTR_AUTOCOMMIT 检测PDO的自动提交功能是否开启 1开启 0关闭
· PDO::ATTR_CASE 大小写转换设置
· PDO::ATTR_CLIENT_VERSION 当前客户端的版本
· PDO::ATTR_CONNECTION_STATUS 检测当 前的链接状态
· PDO::ATTR_DRIVER_NAME 当前数据库的名称
· PDO::ATTR_ERRMODE 当前的错误处理方式
· PDO::ATTR_ORACLE_NULLS 当前的oracle的空值转换设置
· PDO::ATTR_PERSISTENT 检测当前链接是否是持久链接
· PDO::ATTR_PREFETCH 预先获取要处理的数据的大小
· PDO::ATTR_SERVER_INFO 服务器信息
· PDO::ATTR_SERVER_VERSION 服务器版本
· PDO::ATTR_TIMEOUT 设置当前的数据处理超时时间
pdo可以设置的相关属性:
PDO::ATTR_CASE 设置PDO的大小写转换
PDO::CASE_LOWER 全转化为小写字母
PDO::CASE_NATURAL: 保持原有状态
PDO::CASE_UPPER: 全部转化为大写
PDO::ATTR_ERRMODE 设置当前PDO的错误处理模式
PDO::ERRMODE_SILENT: 寂静模式(默认)
该模式需要配合errorCode和errorInfo才能显示错误.
PDO::ERRMODE_WARNING: 系统语法提示
该模式直接使用系统提供的错误处理模式warnning..
PDO::ERRMODE_EXCEPTION:异常处理模式
利用try..catch语法自动抛出错误处理..
PDO::ATTR_ORACLE_NULLS 设置当前的空值转换方式
PDO::NULL_NATURAL 不转换,保持原有状态
PDO::NULL_EMPTY_STRING:空字符串被转换为空值 oracle->mysql
PDO::NULL_TO_STRING: 空值被转换为空字符串 mysql->oralce
PDO::ATTR_TIMEOUT 设置超时时间 mysql不支持
PDO::ATTR_AUTOCOMMIT 设置当前是否使用自动提交功能
false 关闭自动提交
true 开启自动提交 默认