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常用代码
Nov 23 PHP
PHP学习笔记之数组篇
Jun 28 PHP
在WINDOWS中设置计划任务执行PHP文件的方法
Dec 19 PHP
php cc攻击代码与防范方法
Oct 18 PHP
解析如何去掉CodeIgniter URL中的index.php
Jun 25 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
Oct 10 PHP
php操作xml入门之xml标签的属性分析
Jan 23 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
Mar 04 PHP
对于Laravel 5.5核心架构的深入理解
Feb 22 PHP
php操作mongodb封装类与用法实例
Sep 01 PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
Oct 18 PHP
laravel开发环境homestead搭建过程详解
Jul 03 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 array_merge下进行数组合并的代码
2008/07/22 PHP
php防盗链的常用方法小结
2010/07/02 PHP
php中foreach结合curl实现多线程的方法分析
2016/09/22 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
实现局部遮罩与关闭原理及代码
2013/02/04 Javascript
javascript:文字不间断向左移动的实例代码
2013/08/08 Javascript
JS获取键盘上任意按键的值(实例代码)
2013/11/12 Javascript
谷歌浏览器调试JavaScript小技巧
2014/12/29 Javascript
jQuery中die()方法用法实例
2015/01/19 Javascript
AngularJS基础知识笔记之表格
2015/05/10 Javascript
jquery实现可关闭的倒计时广告特效代码
2015/09/02 Javascript
详解Bootstrap插件
2016/04/25 Javascript
Bootstrap响应式侧边栏改进版
2016/09/17 Javascript
使用JavaScript获取Request中参数的值方法
2016/09/27 Javascript
EasyUI 结合JS导出Excel文件的实现方法
2016/11/10 Javascript
vue实现列表的添加点击
2016/12/29 Javascript
jQuery实现移动端Tab选项卡效果
2017/03/15 Javascript
微信小程序实现获取小程序码和二维码java接口开发
2019/03/29 Javascript
Vue开发Html5微信公众号的步骤
2019/04/11 Javascript
layui的select联动实现代码
2019/09/28 Javascript
[16:43]Heroes19_剃刀(完美)
2014/10/31 DOTA
[54:09]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
Python解析nginx日志文件
2015/05/11 Python
python获取mp3文件信息的方法
2015/06/15 Python
Python Series从0开始索引的方法
2018/11/06 Python
pycharm第三方库安装失败的问题及解决经验分享
2020/05/09 Python
First Aid Beauty官网:FAB急救面霜
2018/05/24 全球购物
澳大利亚体育和露营装备在线/实体零售商:Find Sports
2020/06/03 全球购物
技校生自我鉴定范文
2013/09/26 职场文书
医院护理人员的自我评价分享
2013/10/04 职场文书
普通简短的个人自我评价
2014/02/15 职场文书
爱心捐助倡议书
2014/05/19 职场文书
计算机专业求职信
2014/06/02 职场文书
高中运动会广播稿
2014/09/16 职场文书
建党伟业观后感
2015/06/01 职场文书
集英社今正式宣布 成立游戏公司“集英社Games”
2022/03/31 其他游戏