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 相关文章推荐
PHP4和PHP5性能测试和对比 测试代码与环境
Aug 17 PHP
php中根据变量的类型 选择echo或dump
Jul 05 PHP
mongo Table类文件 获取MongoCursor(游标)的实现方法分析
Jul 01 PHP
根据ip调用新浪api获取城市名并转成拼音
Mar 07 PHP
PHP Warning: Module 'modulename' already loaded in问题解决办法
Mar 16 PHP
DEDECMS首页调用图片集里的多张图片
Jun 05 PHP
PHP缓冲区用法总结
Feb 14 PHP
smarty循环嵌套用法示例分析
Jul 19 PHP
php求数组全排列,元素所有组合的方法总结
Mar 14 PHP
详解PHP素材图片上传、下载功能
Apr 12 PHP
PHP中__set()实例用法和基础讲解
Jul 23 PHP
php框架CI(codeigniter)自动加载与自主创建对象操作实例分析
Jun 06 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 smarty模版引擎中变量操作符及使用方法
2009/12/11 PHP
PHP开发中常用的三个表单验证函数使用小结
2010/03/03 PHP
PHP __autoload函数(自动载入类文件)的使用方法
2012/02/04 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
2013/06/28 PHP
在你的网页中嵌入外部网页的方法
2007/04/02 Javascript
javascript js cookie的存储,获取和删除
2007/12/29 Javascript
Document 对象的常用方法
2009/07/31 Javascript
一个不错的js html页面倒计时可精确到秒
2014/10/22 Javascript
jquery使用经验小结
2015/05/20 Javascript
JavaScript操作URL的相关内容集锦
2015/10/29 Javascript
javascript数据结构之双链表插入排序实例详解
2015/11/25 Javascript
react配合antd组件实现的管理系统示例代码
2018/04/24 Javascript
elementUI中Table表格问题的解决方法
2018/12/04 Javascript
一步快速解决微信小程序中textarea层级太高遮挡其他组件
2019/03/04 Javascript
vue cli3 调用百度翻译API翻译页面的实现示例
2019/09/13 Javascript
Vue的生命周期操作示例
2019/09/17 Javascript
python获取android设备的GPS信息脚本分享
2015/03/06 Python
python编写的最短路径算法
2015/03/25 Python
python动态参数用法实例分析
2015/05/25 Python
Python简明入门教程
2015/08/04 Python
python中datetime模块中strftime/strptime函数的使用
2018/07/03 Python
从运行效率与开发效率比较Python和C++
2018/12/14 Python
解决Python中定时任务线程无法自动退出的问题
2019/02/18 Python
python3检查字典传入函数键是否齐全的实例
2020/06/05 Python
控制工程专业个人求职信
2013/09/25 职场文书
高分子材料个人求职信范文
2013/09/25 职场文书
纪念建党演讲稿范文
2014/01/13 职场文书
领导班子四风表现材料
2014/08/23 职场文书
领导班子四风对照检查材料
2014/09/23 职场文书
北京离婚协议书范文2014
2014/09/29 职场文书
2015年仓管员工作总结
2015/04/21 职场文书
出纳2015年度工作总结范文
2015/10/14 职场文书
使用python如何删除同一文件夹下相似的图片
2021/05/07 Python
Django如何创作一个简单的最小程序
2021/05/12 Python
Python中requests做接口测试的方法
2021/05/30 Python
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
2022/05/11 Servers