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编写PDF文档生成器
Oct 09 PHP
Discuz!下Memcache缓存实现方法
May 28 PHP
第三章 php操作符与控制结构代码
Dec 30 PHP
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
Jul 16 PHP
完美的2个php检测字符串是否是utf-8编码函数分享
Jul 28 PHP
深入浅析PHP7.0新特征(五大新特征)
Oct 29 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
Nov 25 PHP
深入浅析PHP的session反序列化漏洞问题
Jun 15 PHP
Yii 2.0实现联表查询加搜索分页的方法示例
Aug 02 PHP
PHP文件类型检查及fileinfo模块安装使用详解
May 09 PHP
php array_chunk()函数用法与注意事项
Jul 12 PHP
如何重写Laravel异常处理类详解
Dec 20 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,不用COM,生成excel文件
2006/10/09 PHP
实时抓取YAHOO股票报价的代码
2006/10/09 PHP
PHP5中使用PDO连接数据库的方法
2010/08/01 PHP
保存到桌面、设为桌面且带图标的PHP代码
2013/11/19 PHP
PHP实现补齐关闭的HTML标签
2016/03/22 PHP
jquery+thinkphp实现跨域抓取数据的方法
2016/10/15 PHP
PHP操作Redis常用命令的实例详解
2020/12/23 PHP
php命令行模式代码实例详解
2021/02/26 PHP
Jquery 选中表格一列并对表格排序实现原理
2012/12/15 Javascript
JS 作用域与作用域链详解
2015/04/07 Javascript
详解Node.js中的事件机制
2016/09/22 Javascript
BootStrap Validator使用注意事项(必看篇)
2016/09/28 Javascript
vue之nextTick全面解析
2017/05/17 Javascript
layer.open关闭父窗口 以及调用父页面的方法
2018/08/17 Javascript
可能被忽略的一些JavaScript数组方法细节
2019/02/28 Javascript
keep-alive不能缓存多层级路由菜单问题解决
2020/03/10 Javascript
python简单商城购物车实例代码
2018/03/15 Python
Python标准库使用OrderedDict类的实例讲解
2019/02/14 Python
python numpy数组复制使用实例解析
2020/01/10 Python
将数据集制作成VOC数据集格式的实例
2020/02/17 Python
python同时遍历两个list用法说明
2020/05/02 Python
详解python logging日志传输
2020/07/01 Python
pycharm导入源码的具体步骤
2020/08/04 Python
Django haystack实现全文搜索代码示例
2020/11/28 Python
分享unittest单元测试框架中几种常用的用例加载方法
2020/12/02 Python
详解CSS3的opacity属性设置透明效果的用法
2016/05/09 HTML / CSS
世界上最大的汽车共享网站:Zipcar
2017/01/14 全球购物
介绍下Java的输入输出流
2014/01/22 面试题
高中生自我鉴定范文
2013/10/30 职场文书
省三好学生申请材料
2014/01/22 职场文书
教师申诉制度
2014/01/29 职场文书
《蒲公英》教学反思
2014/02/28 职场文书
双拥工作宣传标语
2014/06/26 职场文书
教师群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
python基础入门之普通操作与函数(三)
2021/06/13 Python
MySQL一劳永逸永久支持输入中文的方法实例
2022/08/05 MySQL