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 相关文章推荐
用Flash图形化数据(一)
Oct 09 PHP
PHP禁止页面缓存的代码
Oct 23 PHP
ThinkPHP应用模式扩展详解
Jul 16 PHP
PHP图片处理之图片旋转和图片翻转实例
Nov 19 PHP
在Debian系统下配置LNMP的教程
Jul 09 PHP
PHP实现的简单网络硬盘
Jul 29 PHP
JSON字符串传到后台PHP处理问题的解决方法
Jun 05 PHP
Yii2实现UploadedFile上传文件示例
Feb 15 PHP
PHP输出多个元素的排列或组合的方法
Mar 14 PHP
PHP Laravel 上传图片、文件等类封装
Aug 16 PHP
Laravel框架实现的使用smtp发送邮件功能示例
Mar 12 PHP
Laravel 解决composer相关操作提示php相关异常的问题
Oct 23 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
世界收音机发展史
2021/03/01 无线电
分割GBK中文遭遇乱码的解决方法
2013/08/09 PHP
PHP判断文章里是否有图片的简单方法
2014/07/26 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
php获取数据库结果集方法(推荐)
2017/06/01 PHP
javascript 动态修改样式和层叠样式表代码
2010/04/27 Javascript
图片无缝滚动代码(向左/向下/向上)
2013/04/10 Javascript
jQuery仿Excel表格编辑功能的实现代码
2013/05/01 Javascript
javascript随机将第一个dom中的图片添加到第二个div中示例
2013/10/08 Javascript
js登录弹出层特效
2014/03/07 Javascript
Jquery实现图片预加载与延时加载的方法
2014/12/22 Javascript
js+html5实现canvas绘制镂空字体文本的方法
2015/06/05 Javascript
在Ubuntu系统上安装Node.JS的教程
2015/10/15 Javascript
解决微信浏览器Javascript无法使用window.location.reload()刷新页面
2016/06/21 Javascript
JavaScript实现移动端滑动选择日期功能
2016/06/21 Javascript
全面解析标签页的切换方式
2016/08/21 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
2016/12/02 Javascript
jquery Banner轮播选项卡
2016/12/26 Javascript
JavaScrpt判断一个数是否是质数的实例代码
2017/06/11 Javascript
angularjs 获取默认选中的单选按钮的value方法
2018/02/28 Javascript
详解小程序BackgroundAudioManager踩坑之旅
2019/12/08 Javascript
vue中使用vue-print.js实现多页打印
2020/03/05 Javascript
Python datetime时间格式化去掉前导0
2014/07/31 Python
python选择排序算法实例总结
2015/07/01 Python
Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)
2019/07/16 Python
PyQt5使用QTimer实现电子时钟
2019/07/29 Python
python文字和unicode/ascll相互转换函数及简单加密解密实现代码
2019/08/12 Python
Python实现图片识别加翻译功能
2019/12/26 Python
python 如何快速复制序列
2020/09/07 Python
在线购买廉价折扣书籍和小说:BookOutlet.com
2018/02/19 全球购物
Homestay中文官网:全球寄宿家庭
2018/10/18 全球购物
会计专业大学生职业生涯规划范文
2014/01/11 职场文书
晚会邀请函范文
2014/01/24 职场文书
中式婚礼主持词
2014/03/13 职场文书
求职教师自荐书
2014/06/19 职场文书
慈善募捐倡议书
2015/04/27 职场文书