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读写文件的方法(生成HTML)
Nov 27 PHP
php制作中间带自己定义图片二维码的方法
Jan 27 PHP
PHP引用(&amp;)各种使用方法实例详解
Mar 20 PHP
PHP批量检测并去除文件BOM头代码实例
May 08 PHP
ThinkPHP实现将SESSION存入MYSQL的方法
Jul 22 PHP
php自定义apk安装包实例
Oct 20 PHP
PHP验证码生成原理和实现
Jan 24 PHP
Yii使用DeleteAll连表删除出现报错问题的解决方法
Jul 14 PHP
值得分享的php+ajax实时聊天室
Jul 20 PHP
php版微信自动获取收货地址api用法示例
Sep 22 PHP
Ajax+Jpgraph实现的动态折线图功能示例
Feb 11 PHP
ThinkPHP中图片按比例切割的代码实例
Mar 08 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
生成ubuntu自动切换壁纸xml文件的php代码
2010/07/17 PHP
ThinkPHP使用smarty模板引擎的方法
2014/07/01 PHP
Yii2.0多文件上传实例说明
2017/07/24 PHP
Laravel实现定时任务的示例代码
2017/08/10 PHP
Laravel中的Auth模块详解
2017/08/17 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
2021/02/26 PHP
js判断输入是否为数字的具体实例
2013/08/03 Javascript
浅析JavaScript中两种类型的全局对象/函数
2013/12/05 Javascript
javascript实现表格排序 编辑 拖拽 缩放
2015/01/02 Javascript
全面解析JavaScript的Backbone.js框架中的Router路由
2016/05/05 Javascript
JavaScript编写Chrome扩展实现与浏览器的交互及时间通知
2016/05/16 Javascript
详解jQuery中的deferred对象的使用(一)
2016/05/27 Javascript
jQuery 3.0十大新特性
2016/07/06 Javascript
Jqprint实现页面打印
2017/01/06 Javascript
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
2017/12/06 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
2019/01/05 jQuery
Vue快速实现通用表单验证功能
2019/12/05 Javascript
对python 各种删除文件失败的处理方式分享
2018/04/24 Python
Django Rest framework之权限的实现示例
2018/12/17 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
2019/08/13 Python
python kafka 多线程消费者&amp;手动提交实例
2019/12/21 Python
django正续或者倒序查库实例
2020/05/19 Python
纯css3实现的鼠标悬停动画按钮
2014/12/23 HTML / CSS
HTML5之web workers_动力节点Java学院整理
2017/07/17 HTML / CSS
Coccinelle官网:意大利的著名皮具品牌
2019/05/15 全球购物
Mountain Warehouse波兰官方网站:英国户外品牌
2019/08/29 全球购物
土木工程毕业生自荐信
2013/09/21 职场文书
保安员岗位职责
2013/11/17 职场文书
学习党章思想汇报
2014/01/07 职场文书
职业生涯规划设计步骤
2014/01/12 职场文书
大学国际贸易专业自荐信
2014/06/05 职场文书
党的群众路线对照检查材料思想汇报(学校)
2014/10/04 职场文书
2014年客房部工作总结
2014/11/22 职场文书
MySQL数据迁移相关总结
2021/04/29 MySQL
SpringBoot读取Resource下文件的4种方法
2021/07/02 Java/Android