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 相关文章推荐
Oracle Faq(Oracle的版本)
Oct 09 PHP
用PHP发电子邮件
Oct 09 PHP
PHP多线程抓取网页实现代码
Jul 22 PHP
关于查看MSSQL 数据库 用户每个表 占用的空间大小
Jun 21 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(七)
Jun 23 PHP
php关联数组快速排序的方法
Apr 17 PHP
PHP传值到不同页面的三种常见方式及php和html之间传值问题
Nov 19 PHP
Windows下PHP开发环境搭建教程(Apache+PHP+MySQL)
Jun 13 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
Nov 29 PHP
PHP空值检测函数与方法汇总
Nov 19 PHP
详解php与ethereum客户端交互
Apr 28 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
Oct 12 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 工厂模式使用方法
2010/05/18 PHP
php实现读取和写入tab分割的文件
2015/06/01 PHP
微信公众号模板消息群发php代码示例
2016/12/29 PHP
PHP重定向与伪静态区别
2017/02/19 PHP
Laravel5中Cookie的使用详解
2017/05/03 PHP
动态刷新 dorado树的js代码
2009/06/12 Javascript
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
浅析用prototype定义自己的方法
2013/11/14 Javascript
按钮接受回车事件的三种实现方法
2014/06/06 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
2015/01/13 Javascript
javascript自定义in_array()函数实现方法
2015/08/03 Javascript
JSON键值对序列化和反序列化解析
2017/01/24 Javascript
微信小程序 图片宽度自适应的实现
2017/04/06 Javascript
jQuery实现标签子元素的添加和赋值方法
2018/02/24 jQuery
详解处理bootstrap4不支持远程静态框问题
2018/07/20 Javascript
vue-mugen-scroll组件实现pc端滚动刷新
2019/08/16 Javascript
关于vue.js中实现方法内某些代码延时执行
2019/11/14 Javascript
vue点击按钮动态创建与删除组件功能
2019/12/29 Javascript
Vue路由切换页面不更新问题解决方案
2020/07/10 Javascript
Vue实现开关按钮拖拽效果
2020/09/22 Javascript
ant design vue datepicker日期选择器中文化操作
2020/10/28 Javascript
[02:58]献给西雅图的情书_高清
2014/05/29 DOTA
python中string模块各属性以及函数的用法介绍
2016/05/30 Python
简单掌握Python的Collections模块中counter结构的用法
2016/07/07 Python
快速了解Python开发中的cookie及简单代码示例
2018/01/17 Python
python实现从文件中读取数据并绘制成 x y 轴图形的方法
2018/10/14 Python
简单了解Python3里的一些新特性
2019/07/13 Python
Python在Matplotlib图中显示中文字体的操作方法
2019/07/29 Python
Python3 获取文件属性的方式(时间、大小等)
2020/03/12 Python
Feelunique美国:欧洲大型的在线美妆零售电商
2018/11/04 全球购物
RetroStage德国:复古服装
2019/02/03 全球购物
KTV门卫岗位职责
2014/10/09 职场文书
党的群众路线学习笔记
2014/11/06 职场文书
抗洪救灾感谢信
2015/01/22 职场文书
react中props 的使用及进行限制的方法
2021/04/28 Javascript
详细总结Python常见的安全问题
2021/05/21 Python