PHP的PDO大对象(LOBs)


Posted in PHP onJanuary 27, 2019

PHP PDO 大对象 (LOBs)

应用程序在某一时刻,可能需要在数据库中存储"大"数据。

"大"通常意味着"大约 4kb 或以上",尽管某些数据库在数据达到"大"之前可以轻松地处理多达 32kb 的数据。大对象本质上可能是文本或二进制。

PDOStatement::bindParam()PDOStatement::bindColumn())调用中使用PDO::PARAM_LOB类型码可以让 PDO使用大数据类型。

PDO::PARAM_LOB告诉PDO作为流来映射数据,以便能使用PHP Streams API来操作。

从数据库中显示一张图片

下面例子绑定一个LOB到$lob变量,然后用fpassthru()将其发送到浏览器。因为LOB代表一个流,所以类似fgets()fread()以及stream_get_contents()这样的函数都可以用在它上面。

<?php
$db = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2');
$stmt = $db->prepare("select contenttype, imagedata from images where id=?");
$stmt->execute(array($_GET['id']));
$stmt->bindColumn(1, $type, PDO::PARAM_STR, 256);
$stmt->bindColumn(2, $lob, PDO::PARAM_LOB);
$stmt->fetch(PDO::FETCH_BOUND);
header("Content-Type: $type");
fpassthru($lob);
?>

插入一张图片到数据库

下面例子打开一个文件并将文件句柄传给PDO来做为一个LOB插入。PDO尽可能地让数据库以最有效的方式获取文件内容。

<?php
$db = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2');
$stmt = $db->prepare("insert into images (id, contenttype, imagedata) values (?, ?, ?)");
$id = get_new_id(); // 调用某个函数来分配一个新 ID
// 假设处理一个文件上传
// 可以在 PHP 文档中找到更多的信息
$fp = fopen($_FILES['file']['tmp_name'], 'rb');
$stmt->bindParam(1, $id);
$stmt->bindParam(2, $_FILES['file']['type']);
$stmt->bindParam(3, $fp, PDO::PARAM_LOB);
$db->beginTransaction();
$stmt->execute();
$db->commit();
?>

插入一张图片到数据库:Oracle

对于从文件插入一个lob,Oracle略有不同。必须在事务之后进行插入,否则当执行查询时导致新近插入LOB将以0长度被隐式提交:

<?php
$db = new PDO('oci:', 'scott', 'tiger');
$stmt = $db->prepare("insert into images (id, contenttype, imagedata) " .
"VALUES (?, ?, EMPTY_BLOB()) RETURNING imagedata INTO ?");
$id = get_new_id(); // 调用某个函数来分配一个新 ID
// 假设处理一个文件上传
// 可以在 PHP 文档中找到更多的信息
$fp = fopen($_FILES['file']['tmp_name'], 'rb');
$stmt->bindParam(1, $id);
$stmt->bindParam(2, $_FILES['file']['type']);
$stmt->bindParam(3, $fp, PDO::PARAM_LOB);
$stmt->beginTransaction();
$stmt->execute();
$stmt->commit();
?>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

PHP 相关文章推荐
不用数据库的多用户文件自由上传投票系统(3)
Oct 09 PHP
php 魔术方法使用说明
Oct 20 PHP
PHP explode()函数用法、切分字符串
Oct 03 PHP
PHP 实现explort() 功能的详解
Jun 20 PHP
PHP把网页保存为word文件的三种方法
Apr 01 PHP
Yii学习总结之安装配置
Feb 22 PHP
yii2控制器Controller Ajax操作示例
Jul 23 PHP
Laravel下生成验证码的类
Nov 15 PHP
thinkPHP框架实现的简单计算器示例
Dec 07 PHP
laravel 解决paginate查询多个字段报错的问题
Oct 22 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
Nov 21 PHP
php字符串函数 str类常见用法示例
May 15 PHP
实例讲解PHP中使用命名空间
Jan 27 #PHP
PHP的PDO错误与错误处理
Jan 27 #PHP
实例分析PHP将字符串转换成数字的方法
Jan 27 #PHP
PHP的PDO预处理语句与存储过程
Jan 27 #PHP
PHP中数组转换为SimpleXML教程
Jan 27 #PHP
实例讲解php实现多线程
Jan 27 #PHP
php中访问修饰符的知识点总结
Jan 27 #PHP
You might like
php实现的常见排序算法汇总
2014/09/08 PHP
javascript FormatNumber函数实现方法
2008/12/30 Javascript
通过Javascript将数据导出到外部Excel文档的函数代码
2012/06/15 Javascript
屏蔽网页右键复制和ctrl+c复制的js代码
2013/01/04 Javascript
THREE.JS入门教程(5)你应当知道的十件事
2013/01/24 Javascript
中止javascript执行的方法
2014/02/14 Javascript
JavaScript导出Excel实例详解
2014/11/25 Javascript
confirm确认对话框的实现方法总结
2016/06/17 Javascript
nodeJs内存泄漏问题详解
2016/09/05 NodeJs
javascript数组去重方法分析
2016/12/15 Javascript
Vue中的作用域CSS和CSS模块的区别
2018/10/09 Javascript
使用ECharts实现状态区间图
2018/10/25 Javascript
Node配合WebSocket做多文件下载以及进度回传
2019/11/07 Javascript
使用jquery实现轮播图效果
2021/01/02 jQuery
[00:34]TI7不朽珍藏III——地穴编织者不朽展示
2017/07/15 DOTA
[01:05:07]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第一场2月1日
2021/03/11 DOTA
Python读写配置文件的方法
2015/06/03 Python
Python封装原理与实现方法详解
2018/08/28 Python
解决python "No module named pip" 的问题
2018/10/13 Python
python使用循环打印所有三位数水仙花数的实例
2018/11/13 Python
ActiveMQ:使用Python访问ActiveMQ的方法
2019/01/30 Python
Python批量修改图片分辨率的实例代码
2019/07/04 Python
Python numpy数组转置与轴变换
2019/11/15 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
2020/05/11 Python
Python2.6版本pip安装步骤解析
2020/08/17 Python
3D动画《斗罗大陆》上线当日播放过亿
2021/03/16 国漫
html5使用html2canvas实现浏览器截图的示例
2017/08/31 HTML / CSS
通过HTML5规范搞定i、em、b、strong元素的区别
2017/03/04 HTML / CSS
全球领先的全景影像品牌:Insta360
2019/08/21 全球购物
戴尔荷兰官方网站:Dell荷兰
2020/10/04 全球购物
Weblogc domain问题
2014/01/27 面试题
英文版餐饮运营管理求职信
2013/11/06 职场文书
保密承诺书范文
2014/03/27 职场文书
初三学生个人自我评定
2014/04/06 职场文书
2015年度党员个人总结
2015/02/14 职场文书
公开致歉信
2019/06/24 职场文书