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 相关文章推荐
PHP输出控制功能在简繁体转换中的应用
Oct 09 PHP
PHP入门学习的几个不错的实例代码
Jul 13 PHP
sqlyog 中文乱码问题的设置方法
Oct 19 PHP
PHP ajax 分页类代码
Nov 13 PHP
mysql下创建字段并设置主键的php代码
May 16 PHP
PHP用GD库生成高质量的缩略图片
Mar 09 PHP
php使用exec shell命令注入的方法讲解
Nov 12 PHP
php获取表单中多个同名input元素的值
Mar 20 PHP
php计算一个文件大小的方法
Mar 30 PHP
php生成图片验证码
Jun 09 PHP
Cygwin中安装PHP方法步骤
Jul 04 PHP
PHP实现验证码校验功能
Nov 16 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
二十行语句实现从Excel到mysql的转化
2006/10/09 PHP
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
2013/06/20 PHP
为百度UE编辑器上传图片添加水印功能
2015/04/16 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
jQuery使用手册之二 DOM操作
2007/03/24 Javascript
javascript中hasOwnProperty() 方法使用指南
2015/03/09 Javascript
JavaScript Split()方法
2015/12/18 Javascript
详谈javascript异步编程
2016/02/21 Javascript
分享js粘帖屏幕截图到web页面插件screenshot-paste
2020/08/21 Javascript
vuejs2.0子组件改变父组件的数据实例
2017/05/10 Javascript
js如何编写简单的ajax方法库
2017/08/02 Javascript
Angular中使用ng-zorro图标库部分图标不能正常显示问题
2019/04/22 Javascript
jQuery实现消息弹出框效果
2019/12/10 jQuery
使用typescript改造koa开发框架的实现
2020/02/04 Javascript
JavaScript实现随机点名程序
2020/03/25 Javascript
Vue如何提升首屏加载速度实例解析
2020/06/25 Javascript
Pandas探索之高性能函数eval和query解析
2017/10/28 Python
用sqlalchemy构建Django连接池的实例
2019/08/29 Python
python模拟预测一下新型冠状病毒肺炎的数据
2020/02/01 Python
Python通过递归函数输出嵌套列表元素
2020/10/15 Python
Python日志打印里logging.getLogger源码分析详解
2021/01/17 Python
HTML5 Canvas渐进填充与透明实现图像的Mask效果
2013/07/11 HTML / CSS
一家专门做特卖的网站:唯品会
2016/10/09 全球购物
最便宜促销价格订机票:Airpaz(总部设在印尼,支持中文)
2018/11/13 全球购物
有影响力的人、名人和艺术家的官方商品:Represent
2019/11/26 全球购物
美国在线购买空气净化器、除湿器、加湿器网站:AllergyBuyersClub
2021/03/16 全球购物
《藏戏》教学反思
2014/02/11 职场文书
一分钟演讲稿
2014/04/30 职场文书
模特大赛策划方案
2014/05/28 职场文书
机票销售员态度不好检讨书
2014/09/27 职场文书
简单租房协议书
2014/10/21 职场文书
社区五一劳动节活动总结
2015/02/09 职场文书
教师求职自荐信
2015/03/26 职场文书
创业计划书之溜冰场
2019/10/25 职场文书
基于Go语言构建RESTful API服务
2021/07/25 Golang
Golang Elasticsearches 批量修改查询及发送MQ
2022/04/19 Golang