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 相关文章推荐
BBS(php &amp; mysql)完整版(七)
Oct 09 PHP
给php新手谈谈我的学习心得
Feb 25 PHP
PHP 图片水印类代码
Aug 27 PHP
PHP转换IP地址到真实地址的方法详解
Jun 09 PHP
360通用php防护代码(使用操作详解)
Jun 18 PHP
destoon常用的安全设置概述
Jun 21 PHP
ThinkPHP模板范围判断输出In标签与Range标签用法详解
Jun 30 PHP
变量在 PHP7 内部的实现(一)
Dec 21 PHP
PHP中的数组处理函数实例总结
Jan 09 PHP
PHP导出Excel实例讲解
Jan 24 PHP
php empty 函数判断结果为空但实际值却为非空的原因解析
May 28 PHP
php实现自动生成验证码的实例讲解
Nov 17 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获取指定日期所在月的开始日期与结束日期
2013/08/01 PHP
PHP_Cooikes不同页面无法传递的解决方法
2014/03/07 PHP
PHP简单实现上一页下一页功能示例
2016/09/14 PHP
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
2010/06/25 Javascript
javascript获取当前日期时间及其它操作函数
2011/01/11 Javascript
JavaScript中变量提升 Hoisting
2012/07/03 Javascript
JQquery的一些使用心得分享
2012/08/01 Javascript
深入理解JavaScript系列(29):设计模式之装饰者模式详解
2015/03/03 Javascript
MUI 上拉刷新/下拉加载功能实例代码
2017/04/13 Javascript
Angular 4根据组件名称动态创建出组件的方法教程
2017/11/01 Javascript
web前端vue filter 过滤器
2018/01/12 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
2019/01/27 jQuery
前端vue-cli项目中使用img图片和background背景图的几种方法
2019/11/13 Javascript
nuxt静态部署打包相对路径操作
2020/11/06 Javascript
Vue与React的区别和优势对比
2020/12/18 Vue.js
python线程锁(thread)学习示例
2013/12/04 Python
使用Python进行稳定可靠的文件操作详解
2013/12/31 Python
详解使用 pyenv 管理多个版本 python 环境
2017/10/19 Python
python3 下载网络图片代码实例
2019/08/27 Python
wxPython实现分隔窗口
2019/11/19 Python
python3实现飞机大战
2020/11/29 Python
美国一家著名的儿童鞋制造商:Stride Rite
2017/01/02 全球购物
澳大利亚最受欢迎的女士度假服装:Kabana Shop
2020/10/10 全球购物
应届生护士求职信
2013/11/01 职场文书
施工班组长岗位职责
2014/01/05 职场文书
《美丽的小路》教学反思
2014/02/26 职场文书
大学生自荐材料范文
2014/12/30 职场文书
人事主管岗位职责
2015/02/04 职场文书
教师个人年度总结
2015/02/11 职场文书
公司员工辞职信范文
2015/05/12 职场文书
工会经费申请报告
2015/05/15 职场文书
学生党支部工作总结2015
2015/05/26 职场文书
宣传稿格式范文
2015/07/23 职场文书
Python机器学习之KNN近邻算法
2021/05/14 Python
详解使用 CSS prefers-* 规范提升网站的可访问性与健壮性
2021/05/25 HTML / CSS
Python 数据可视化神器Pyecharts绘制图像练习
2022/02/28 Python