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 foreach循环使用详解与实例代码
May 08 PHP
php产生随机数的两种方法实例代码 输出随机IP
Apr 08 PHP
基于php在各种web服务器的运行模式详解
Jun 03 PHP
一个php生成16位随机数的代码(两种方法)
Sep 16 PHP
php中spl_autoload详解
Oct 17 PHP
php对象在内存中的存在形式分析
Feb 03 PHP
PHP中trim()函数简单使用指南
Apr 16 PHP
PHP实现中文圆形印章特效
Jun 19 PHP
php+mysql实现简单登录注册修改密码网页
Nov 30 PHP
thinkPHP5项目中实现QQ第三方登录功能
Oct 20 PHP
PHP 实现文件压缩解压操作的方法
Jun 14 PHP
基于Laravel 多个中间件的执行顺序详解
Oct 21 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读取RSS feed的代码
2008/08/01 PHP
PHP 替换模板变量实现步骤
2009/08/24 PHP
php实现基于微信公众平台开发SDK(demo)扩展的方法
2014/12/22 PHP
php操作(删除,提取,增加)zip文件方法详解
2015/03/12 PHP
php实现通过cookie换肤的方法
2015/07/13 PHP
php给图片添加文字水印方法汇总
2015/08/27 PHP
关于div自适应高度/左右高度自适应一致的js代码
2013/03/22 Javascript
自己写的Javascript计算时间差函数
2013/10/28 Javascript
jquery Ajax 实现加载数据前动画效果的示例代码
2014/02/07 Javascript
javascript 原型链维护和继承详解
2014/11/26 Javascript
CSS javascript 结合实现悬浮固定菜单效果
2015/08/23 Javascript
在Ubuntu系统上安装Node.JS的教程
2015/10/15 Javascript
原生JavaScript实现异步多文件上传
2015/12/02 Javascript
jQuery EasyUI的TreeGrid查询功能实现方法
2017/08/08 jQuery
jQuery实现简单日期格式化功能示例
2017/09/19 jQuery
基于canvas实现手写签名(vue)
2020/05/21 Javascript
[01:20]2018DOTA2亚洲邀请赛总决赛战队LGD晋级之路
2018/04/07 DOTA
Python二维码生成库qrcode安装和使用示例
2014/12/16 Python
深入解析Python编程中JSON模块的使用
2015/10/15 Python
淘宝秒杀python脚本 扫码登录版
2019/09/19 Python
pytorch快速搭建神经网络_Sequential操作
2020/06/17 Python
浏览器实现移动端高性能css3动画(开启gpu加速)
2013/12/23 HTML / CSS
Foreo国际站:Foreo International
2018/10/29 全球购物
jQuery treeview树形结构应用
2021/03/24 jQuery
优秀英语专业毕业生求职信
2013/11/23 职场文书
教师自我评价范文
2013/12/16 职场文书
培训讲师邀请函
2014/01/10 职场文书
《落花生》教学反思
2014/02/25 职场文书
陈安之励志演讲稿
2014/08/21 职场文书
县政府班子个人对照检查材料
2014/10/05 职场文书
党员思想汇报材料
2014/12/19 职场文书
2015年大学生暑期实习报告
2015/07/13 职场文书
六年级语文教学反思
2016/03/03 职场文书
2016年感恩节活动总结大全
2016/04/01 职场文书
详解CocosCreator消息分发机制
2021/04/16 Javascript
看完这篇文章获得一些java if优化技巧
2021/07/15 Java/Android