php数据库抽象层pdo.docx
- 文档编号:18311340
- 上传时间:2023-08-15
- 格式:DOCX
- 页数:12
- 大小:19.27KB
php数据库抽象层pdo.docx
《php数据库抽象层pdo.docx》由会员分享,可在线阅读,更多相关《php数据库抽象层pdo.docx(12页珍藏版)》请在冰点文库上搜索。
php数据库抽象层pdo
数据库抽象层PDO
本章任务
v1.pdo的作用
v2.pdo的安装
v3.pdo连接属性设置
v4.pdo预处理的使用
v5.pdo预处理取值
v6.pdo事务机制
扩展
php
//连接数据库几种方式
/**
1.mysql方式mysql_connect()mysql_select_db()mysql_query()
2.mysqli方式
3.PDO
4.ADO(原则上也是所有数据库)微软,sqlservervfaccess,
*/
//mysqli===================================================================================
//oop===========================================================================================
$mysqli=newmysqli("localhost","root","123456","school");//连接数据库并选择库,返回对象
var_dump($mysqli->connect_error);//有内容表示连接错误,nul表示连接正确
///var_dump($mysqli);
$m=$mysqli->query("deletefromstuwhereid=192");//执行增删改·返回布尔,成功与否
echo$mysqli->affected_rows."
";//返回影响行数
$result=$mysqli->query("select*fromstu");
while($rows=$result->fetch_assoc()){
var_dump($rows);
}
//关闭
$result->close();
$mysqli->close();
//mysqli可以这么用---面向过程用法=======================================================
$link=@mysqli_connect("localhost","root","123s456","school")ordie("错误");
$result=mysqli_query($link,"select*fromstu");
while($rows=mysqli_fetch_assoc($result)){
var_dump($rows);
}
mysqli_free_result($result);
mysqli_close($link);
?
>
1.PDO作用
PDO(phpdataobject)扩展类库为php访问数据库定义了轻量级的、一致性的接口,它提供了一个数据库访问抽象层,这样,无论你使用什么数据库,都可以通过一致的函数执行查询和获取数据,大大简化了数据库的捉拿和,并能够屏蔽不同数据库之间的差异,使用pdo可以很方便地进行跨数据库程序的开发,以及不同数据库间的移植,是将来php在数据库处理方面的主要发展方向,它可以支持mysql,postgresql,oracle,mssql等多种数据库
2.PDO的安装
v编辑php.ini文件:
Øextension=php_pdo.dll
Øextension=php_pdo_mysql.dll
v2.重启apache服务:
Øhttpd–krestart
v3.打开phpinfo.php查看是否有pdo
3创建PDO对象
3.1以多种方式调用构造方法
//导入配置文件
require"dbconfig.php";
//创建pdo对象
try{
//$pdo=newPDO("mysql:
host=localhost;dbname=school","root","123456");
$pdo=newPDO(DSN,USER,PASS);
}catch(PDOException$e){
exit("数据连接失败:
".$e->getMessage());
}
PDO与连接有关的选项
vPDO:
:
ATTR_ERRMODE
Ø1.PDO:
:
ERRMODE_SILENT0
Ø2.PDO:
:
ERRMODE_WARNING1
Ø3.PDO:
:
ERRMODE_EXCEPTION2
vPDO:
:
ATTR_AUTOCOMMIT
Ø1.0//关闭自动提交
Ø2.1//开启自动提交
vPDO:
:
ATTR_DEFAULT_FETCH_MODE
Ø1.PDO:
:
FETCH_ASSOC2
Ø2.PDO:
:
FETCH_NUM3
Ø3.PDO:
:
FETCH_BOTH4
Ø4.PDO:
:
FETCH_OBJ5
PDO连接属性设置实例
PDO连接设置字符集
设置php连接mysql时的客户端字符串和连接字符串集为:
$pdo->exec(“setnamesutf8”);
或者:
$pdo->query(“setnamesutf8”);
Pdo相关属性
PDO是否关闭自动提交功能:
PDO:
:
ATTR_AUTOCOMMIT;
当前PDO的错误处理的模式:
PDO:
:
ATTR_ERRMODE;
表字段字符的大小写转换PDO:
:
ATTR_CASE;
与连接状态相关特有信息:
PDO:
:
ATTR_CONNECTION_STATUS
空字符串转换为SQL的null:
PDO:
:
ATTR_ORACLE_NULLS
应用程序提前获取数据大小:
PDO:
:
ATTR_PERSISTENT
与数据库特有的服务器信息:
PDO:
:
ATTR_SERVER_INFO
数据库服务器版本号信息:
PDO:
:
ATTR_SERVER_VERSION
数据库客户端版本号信息:
PDO:
:
ATTR_CLIENT_VERSION
PDO是否关闭自动提交功能:
PDO:
:
ATTR_AUTOCOMMIT
表字段字符的大小写转换:
PDO:
:
ATTR_CASE
php
/*连接有关选项和属性设置*/
//导入配置文件
require"dbconfig.php";
//创建pdo对象
try{
//定义连接选项
//$options=array(PDO:
:
ATTR_ERRMODE=>PDO:
:
ERRMODE_SILENT);//忽略错误
//$options=array(PDO:
:
ATTR_ERRMODE=>PDO:
:
ERRMODE_WARNING);//警告模式
//$options=array(PDO:
:
ATTR_ERRMODE=>PDO:
:
ERRMODE_EXCEPTION);//异常模式
//$options=array(PDO:
:
ATTR_ERRMODE=>PDO:
:
ERRMODE_EXCEPTION,PDO:
:
ATTR_DEFAULT_FETCH_MODE=>PDO:
:
FETCH_ASSOC);//异常模式加关联返回
//$pdo=newPDO("mysql:
host=localhost;dbname=school","root","123456",$options);
$pdo=newPDO(DSN,USER,PASS);
$pdo->setAttribute(PDO:
:
ATTR_ERRMODE,PDO:
:
ERRMODE_EXCEPTION);//设置异常抛出
//$pdo->setAttribute(PDO:
:
ATTR_DEFAULT_FETCH_MODE,PDO:
:
FETCH_ASSOC);//设置返回关联数组
//$pdo->setAttribute(PDO:
:
ATTR_DEFAULT_FETCH_MODE,PDO:
:
FETCH_NUM);//设置返回索引数组
//$pdo->setAttribute(PDO:
:
ATTR_DEFAULT_FETCH_MODE,PDO:
:
FETCH_BOTH);//设置返回索引数组
//$pdo->setAttribute(PDO:
:
ATTR_DEFAULT_FETCH_MODE,PDO:
:
FETCH_OBJ);//设置返回索引数组
//设置属性
}catch(PDOException$e){
exit("数据连接失败:
".$e->getMessage());
}
/*======================================================输出相关属性*/
echo"
PDO是否开启自动提交功能:
".$pdo->getAttribute(PDO:
:
ATTR_AUTOCOMMIT);
echo"
PDO的错误处理方式:
".$pdo->getAttribute(PDO:
:
ATTR_ERRMODE);
echo"
PDO表字段大小写转换信息:
".$pdo->getAttribute(PDO:
:
ATTR_CASE);
echo"
与数据库特有的服务器信息:
".$pdo->getAttribute(PDO:
:
ATTR_SERVER_INFO);
echo"
与数据库特有的服务器版本信息:
".$pdo->getAttribute(PDO:
:
ATTR_SERVER_VERSION);
echo"
与数据库客户端版本信息:
".$pdo->getAttribute(PDO:
:
ATTR_CLIENT_VERSION);
//====================================================================
//发送sql语句
$pdo->query("select*fromstu");
try{
$stmt=$pdo->query("select*fromstu");
//var_dump($stmt->fetch());
var_dump($stmt->fetch(PDO:
:
FETCH_ASSOC));//更加灵活
}catch(PDOException$e){
echo$e->getMessage();
}
?
>
PDO是否开启自动提交功能:
1
PDO的错误处理方式:
2
PDO表字段大小写转换信息:
0
与数据库特有的服务器信息:
Uptime:
40920Threads:
1Questions:
139Slowqueries:
0Opens:
36Flushtables:
1Opentables:
0Queriespersecondavg:
0.003
与数据库特有的服务器版本信息:
5.5.24-log
与数据库客户端版本信息:
mysqlnd5.0.8-dev-20102224-$Id:
65fe78e70ce53d27a6cd578597722950e490b0d0$
array(size=5)
'id'=>string'4'(length=1)
'name'=>string'jack'(length=4)
'age'=>string'19'(length=2)
'sex'=>string'w'(length=1)
'classid'=>string'121'(length=3)
3.2PDO对象中的成员方法
1.query($sql);用于执行查询SQL语句。
返回PDOStatement对象
2.exec($sql);用于执行增、删、改操作,返回影响行数;
3.getAttribute();获取一个"数据库连接对象"属性。
4.setAttribute();设置一个"数据库连接对象"属性。
5.beginTransaction开启一个事物(做一个回滚点)
6.commit提交事务
7.rollBack事务回滚操作。
8.errorCode获取错误码
9.errorInfo获取错误信息
10.lastInsertId获取刚刚添加的主键值。
11.prepare创建SQL的预处理,返回PDOStatement对象
12.quote为sql字串添加单引号。
vpdo:
:
exec()方法
Ø当执行insert,update,delete没有结果集的查询时,使用pdo对象中的exec()方法去执行,该方法成功执行时,将返回受影响的行数,注意,该方法不能用于select查询,
vpdo:
:
query()方法
Ø当执行返回结果集的select查询时,或者所影响的行数无关紧要时,应当使用pdo对象中的query()方法,如果该方法成功执行指定的查询,则返回一个pdostatement对象,如果使用了query()方法,并想了解获取数据行总数,可以使用pdostament对象中的rowCount()方法获取,
4PDO对预处理语句的支持
5.1PDOStatement对象的方法
1、fetch()返回结果集的下一行,结果指针下移,到头返回false。
Ø参数:
PDO:
:
FETCH_BOTH(default)、:
索引加关联数组模式
PDO:
:
FETCH_ASSOC、:
关联数组模式
PDO:
:
FETCH_NUM、:
索引数组模式
PDO:
:
FETCH_OBJ、:
对象模式
PDO:
:
FETCH_LAZY:
所有模式(SQL语句和对象)
2、fetchAll()通过一次调用返回所有结果,结果是以数组形式保存
Ø参数:
PDO:
:
FETCH_BOTH(default)、
PDO:
:
FETCH_ASSOC、
PDO:
:
FETCH_NUM、
PDO:
:
FETCH_OBJ、
PDO:
:
FETCH_COLUMN表示取指定某一列
如:
$rslist=$stmt->fetchAll(PDO:
:
FETCH_COLUMN,2);取第三列
3.execute()负责执行一个准备好了的预处理语句
4.fetchColumn()返回结果集中下一行某个列的值
5.setFetchMode()设置需要结果集合的类型
6.rowCount()返回使用增、删、改、查操作语句后受影响的行总数
7.bindParam()将参数绑定到相应的查询占位符上
boolPDOStatement:
:
bindParam(mixed$parameter,mixed&$variable[,int$data_type[,int$length[,mixed$driver_options]]])
其中:
$parameter:
占位符名或索引偏移量
&$variable:
参数的值,需要按引用传递也就是必须放一个变量
$data_type:
数据类型
PDO:
:
PARAM_BOOLPDO:
:
PARAM_NULL
PDO:
:
PARAM_INTPDO:
:
PARAM_STR
PDO:
:
PARAM_LOBPDO:
:
PARAM_STMT
PDO:
:
PARAM_INPUT_OUTPUT
$length:
指数据类型的长度
$driver_options:
驱动选项。
8.setAttribute()为一个预处理语句设置属性
9.getAttribute()获取一个声明的属性
10.errorCode()获取错误码
11.errorInfo()获取错误信息
12.bindColumn()用来匹配列名和一个指定的变量名,这样每次获取各行记录时,会自动将相应的值赋给变量。
13.bindValue()将一值绑定到对应的一个参数中
14.nextRowset()检查下一行集
15.columnCount()在结果集中返回列的数目
16.getColumnMeta()在结果集中返回某一列的属性信息
17.closeCursor()关闭游标,使该声明再次执行
5.2准备语句
v得到pdo预处理对象的方法:
$sql=“select*fromuserorderbyid”;
$sth=$pdo->prepare($sql);
以上代码中的$sth即为预处理对象
v在PDO中参数式的SQL语句有两种(预处理sql):
1.insertintostu(id,name)value(?
?
);//?
号式(适合参数少的)
2.insertintostu(id,name)value(:
id,:
name);//别名式(适合参数多的)
5.3绑定参数
5.4执行预处理方式
5.5预处理查询
请参加文件login.html和login.php了解sql注入
请参加文件4.php5.php6.php7.php8.php9.php了解预处理,预处理查询
6PDO的事务处理
6.1MySQL的事务处理
v事务:
将多条sql操作(增删改)作为一个操作单元,要么都成功,要么都失败。
vMySQL对事务的支持:
Ø被操作的表必须是innoDB类型的表(支持事务)
ØMySQL常用的表类型:
MyISAM(非事务)增删改速度快、InnodB(事务型)安全性高
Ø更改表的类型为innoDB类型
mysql>altertablestuengine=innodb;
QueryOK,29rowsaffected(0.34sec)
Records:
29Duplicates:
0Warnings:
0
mysql>showcreatetablestu\G;//查看表结构
6.2构建事务处理的应用程序
v开启一次事务:
Ø$pdo->beginTransaction();
v提交一次事务:
Ø$pdo->commit();
v回滚一次事务:
Ø$pdo->rollback();
v注意如下设置:
1.$pdo->setAttribute(PDO:
:
ATTR_AUTOCOMMIT,0);
2.$pdo->setAttribute(PDO:
:
ATTR_AUTOCOMMIT,1);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- php 数据库 抽象 pdo
![提示](https://static.bingdoc.com/images/bang_tan.gif)