PHP中PDO扩展库总结

一.PDO作用
1.PDO(php data object)扩展类库为php访问数据库定义了轻量级的,一致性的接口
2.PDO提供了一个数据库访问抽象层,无论你使用了什么样的数据库,都可以通过一致的
函数执行查询和获取数据,大大简化了数据库的操作,并能够屏蔽不同数据库之间的差异
使用pdo可以方便的进行跨数据库程序的开发,以及不同数据库之间的移植


二.开启PDO扩展
1.使用PDO,需要加载pdo扩展库,请确定php.ini开始数据库扩展
extension_dir = "F:/wamp/php-5.4.45/ext"
extension=php_pdo.dll
extension=php_pdo_mysql.dll
2.重启apache服务
3.使用 extension_loaded()函数可以检测Mysqli库扩展是否开启


三.使用PDO操作数据库
在PHP脚本中使用PDO操作数据库的步骤:
链接数据库服务器并选择数据库
设置使用异常的错误模式
设置字符集
准备并执行sql语句
处理结果集


四.链接Mysql,并选择数据库
new PDO('DSN','用户名','密码');
DSN(Data Source Name)数据源名称包含了请求链接到数据库信息
通常,一个DSN由PDO驱动名,紧随其后跟着冒号,以及具体的PDO驱动的链接语法组成:
mysql:host=127.0.0.1;port=3306;dbname=链接的数据库名
PDOException 异常类 代表一个由PDO产生的错误
getMessage() 获取错误信息
例:
try {
    $pdo=new PDO("mysql:host=127.0.0.1;port=3306;dbname=eshop","root","123456");
} catch (PDOException $e) {
    echo '数据库连接错误: ' . $e->getMessage();
}


五.设置使用异常的错误模式
PDO::getAttribute() 取回一个数据库链接的属性
PDO::setAttribute() 设置属性
PDO::ATTR_ERRMODE:错误模式
 PDO::ERRMODE_SILENT: 仅设置错误代码,不提示
 PDO::ERRMODE_WARNING: 引发 E_WARNING 错误
 PDO::ERRMODE_EXCEPTION: 抛出 exceptions 异常



PDO::exec()执行SQL为 insert update dalete等操作语句 正确将返回受影响的行数,错误将
返回false
PDO::query() 执行SQL为 select、show等查询语句,正确执行将返回资源结果集对象,错误执行
将返回false


六.处理资源结果集
setFetchMode(PDO::FETCH_NUM|PDO::FETCH_ASSOC|PDO::FETCH_BOTH) 设置结果集中数组的格式
FETCH_NUM 索引数组
FETCH_ASSOC 关联数组
FETCH_BOTH 关联|索引 数组


fetch() 从结果集中抽取一行作为数组返回 没有则返回false


fetchAll() 从结果集中抽取所有记录


七.处理非查询语句
lastinsertid() 在插入纪录时,返回最后插入记录的主键ID


八.pdo预处理
预处理好处:仅需解析一次,但可以用相同或不同的参数执行多次
可以确保不会发生SQL注入,提高安全性


1.先new出来一个数据库对象
例:$pdo=new PDO("mysql:host=127.0.0.1;port=3306;dbname=yhshop",'root','123456');


2.设置汉字编码
$pdo->exec("set names utf8");


3.准备要执行SQL语句
PDO::prepare() 准备一个SQL语句并返回一个语句对象
例:$staement=$pdo->prepare(insert into test(name,pwd,mobile) values(?,?,?));
别名形式(适合参数多)
例:$staement=$pdo->prepare(insert into test(name,pwd,mobile) values(:name,:pwd,:mobile));


4.绑定参数
bindParam(占位名[?的话就是用1,2,3|:name,:pwd的话就是':name','pwd'],要赋值的变量名,变量数据类型)  绑定一个参数到指定的变量名
变量数据类型:
PDO::PARAM_STR 字符串型
PDO::PARAM_INT 整型
PDO::PARAM_BOOL 布尔类型
POD::PARAM_NULL null数据类型
POD::PARAM_LOB 大对象数据类型


PDO赋值 数据类型不会强制转换
Mysqli赋值 数据类型会强制转换
例:
$staement->bindParam(1,$username,PDO::PARAM_STR);
$staement->bindParam(2,$password,PDO::PARAM_STR);


5.数据赋值
例:
$username='小六';
$password=md5(123456);


6.执行SQL语句
execute() 执行一条预处理语句 可以在函数里直接赋值 写成数组
rowCount() 返回受上一条SQL语句影响的行数 没有参数
别名形式
绑定参数
$statement->bindParam(':username',$username,PDO::PARAM_STR);
$statement->bindParam(':password',$password,PDO::PARAM_STR);
数据赋值
$username='yh002';
$password=md5('123');
执行SQL
$statement->execute(array('username'=>$username,'pwd'=>$password));
也可以不绑定参数在执行SQL时直接赋值
$statement->execute(array('pwd'=>md5('123'),'username'=>'yh002'));


九.pdo事物处理
事物:将多条sql操作(增删改)作为一个操作单元,要么成功要么失败
被操作的表必须是innoDB类型
设置表类型:alter table yh_admin engine=innodb;
关闭事物处理
set autocommit=0;
setAttribute() 设置一个语句属性,当前没有通用的属性可以设置,只有驱动属性:
PDO::ATTR_AUTOCOMMIT 如果此值为false PDO将试图禁用自动提交以便数据库连接一个事物
开启事物
start transaction;
beginTransaction() 启动一个事物 没有参数
提交事物
commit;
commit() 提交一个事物 没有参数
回滚事物
rollback;
rollback() 回滚一个事物 没有参数
异常处理
例:throw new PDOException('事务处理失败,请重新尝试');
throw 是明确的抛出异常
catch 是用来处理异常错误


十.大数据对象的处理
保存
$dbh= new PDO('mysql:dbname=testdb;host=localhost', 'root', '123456');
$stmt = $db->prepare("INSERT INTO images(mimetype,data) VALUES (?, ?)");
//使用fopen()函数打开上传的文件
$fp = fopen($_FILES['file']['tmp_name'], 'rb');
//将上传文件的MIME类型绑定到第一个参数中
$stmt->bindParam(1, $_FILES['file']['type']);
//将上传文件的二进制数据和第二个参数绑定
$stmt->bindParam(2, $fp, PDO_PARAM_LOB);
$stmt->execute();


bindParam()   绑定一个参数到指定变量名
bindColumn()  绑定一列到一个 PHP 变量



读取
$db = new PDO('mysql:dbname=testdb;host=localhost', 'root', '123456');
$stmt = $db->prepare("SELECT mimetype,data FROM images WHERE id=?");
//通过表单中输入的ID值和参数绑定,并执行查询
$stmt->execute(array($_GET['id']));
 //获取结果集中的大数据类型和文件数据
list($type, $data) = $stmt->fetch();
header("Content-Type: $type");
 //将从表中读取的大文件类型作为合适的报头发送
echo $data;
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Json____

您的鼓励是我创作的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值