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中使用XML
Oct 09 PHP
PHP中simplexml_load_string函数使用说明
Jan 01 PHP
有关PHP中MVC的开发经验分享
May 17 PHP
php在程序中将网页生成word文档并提供下载的代码
Oct 09 PHP
php获取表单中多个同名input元素的值
Mar 20 PHP
php过滤表单提交的html等危险代码
Nov 03 PHP
php实现微信公众号主动推送消息
Dec 31 PHP
PHP QRCODE生成彩色二维码的方法
May 19 PHP
Laravel实现表单提交
May 07 PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
Jul 16 PHP
在PHP中输出JS语句以及乱码问题的解决方案
Feb 13 PHP
laravel 验证错误信息到 blade模板的方法
Sep 29 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
初学者入门:细述PHP4的核心Zend
2006/09/05 PHP
深入HTTP响应状态码速查表的详解
2013/06/07 PHP
php实例分享之二维数组排序
2014/05/15 PHP
CSS中一些@规则的用法小结
2021/03/09 HTML / CSS
8个超棒的学习 jQuery 的网站 推荐收藏
2011/04/02 Javascript
将nodejs打包工具整合到鼠标右键的方法
2013/05/11 NodeJs
JS获取随机数和时间转换的简单实例
2016/07/10 Javascript
解决vue里碰到 $refs 的问题的方法
2017/07/13 Javascript
jQuery实现的弹幕效果完整实例
2017/09/06 jQuery
浅谈vue+webpack项目调试方法步骤
2017/09/11 Javascript
React.Js添加与删除onScroll事件的方法详解
2017/11/03 Javascript
关于vue编译版本引入的问题的解决
2018/09/17 Javascript
30分钟精通React今年最劲爆的新特性——React Hooks
2019/03/11 Javascript
vue实现滑动到底部加载更多效果
2020/10/27 Javascript
vue组件命名和props命名代码详解
2019/09/01 Javascript
[46:50]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python中实现k-means聚类算法详解
2017/11/11 Python
Python通过调用mysql存储过程实现更新数据功能示例
2018/04/03 Python
Python将DataFrame的某一列作为index的方法
2018/04/08 Python
Django通过dwebsocket实现websocket的例子
2019/11/15 Python
python实现图片横向和纵向拼接
2020/03/05 Python
Pycharm 使用 Pipenv 新建的虚拟环境(图文详解)
2020/04/16 Python
Aosom西班牙:家具在线商店
2020/06/11 全球购物
北京天润融通.net面试题笔试题
2012/02/20 面试题
考试退步检讨书
2014/01/15 职场文书
怎样写好创业计划书的内容
2014/02/06 职场文书
学校查摆问题整改措施
2014/09/28 职场文书
中秋节晚会开场白
2015/05/29 职场文书
研讨会致辞
2015/07/31 职场文书
新教师教学工作总结
2015/08/12 职场文书
2016天猫双十一广告语
2016/01/28 职场文书
在校大学生才艺比赛策划书怎么写?
2019/08/26 职场文书
Python实战之实现康威生命游戏
2021/04/26 Python
Python进度条的使用
2021/05/17 Python
Python基础数据类型tuple元组的概念与用法
2021/08/02 Python
默认网关不可用修复后过一会又不好使了解决方法
2022/04/08 数码科技