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 相关文章推荐
PHP5/ZendEngine2的改进
Oct 09 PHP
MySql中正则表达式的使用方法描述
Jul 30 PHP
PHP Header用于页面跳转要注意的几个问题总结
Oct 03 PHP
php 获得汉字拼音首字母的函数
Aug 01 PHP
PHP 字符截取 解决中文的截取问题,不用mb系列
Sep 29 PHP
php用正则表达式匹配中文实例详解
Nov 06 PHP
php中require和require_once的区别说明
Feb 27 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
May 08 PHP
PHP图片等比例缩放生成缩略图函数分享
Jun 10 PHP
destoon实现调用当前栏目分类及子分类和三级分类的方法
Aug 21 PHP
PHP之将POST数据转化为字符串的实现代码
Nov 03 PHP
ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法
Jun 09 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 insert语法详解
2008/06/07 PHP
PHP从数组中删除元素的四种方法实例
2017/05/12 PHP
基于jquery自定义图片热区效果
2012/07/21 Javascript
JS禁用浏览器退格键实现思路及代码
2013/10/29 Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
2015/12/01 Javascript
jquery自定义插件——window的实现【示例代码】
2016/05/06 Javascript
jQuery Mobile操作HTML5的常用函数总结
2016/05/17 Javascript
Jquery Easyui分割按钮组件SplitButton使用详解(17)
2016/12/18 Javascript
jQuery实现可兼容IE6的滚动监听功能
2017/09/20 jQuery
详解webpack性能优化——DLL
2017/10/20 Javascript
详解nvm管理多版本node踩坑
2019/07/26 Javascript
layui扩展上传组件模拟进度条的方法
2019/09/23 Javascript
js实现固定区域内的不重叠随机圆
2019/10/24 Javascript
vue 开发企业微信整合案例分析
2019/12/02 Javascript
vue 移动端记录页面浏览位置的方法
2020/03/11 Javascript
JavaScript实现简易计算器小功能
2020/10/22 Javascript
使用Python实现一个简单的项目监控
2015/03/31 Python
详解Python中映射类型(字典)操作符的概念和使用
2015/08/19 Python
Python 探针的实现原理
2016/04/23 Python
常见的python正则用法实例讲解
2016/06/21 Python
python批量添加zabbix Screens的两个脚本分享
2017/01/16 Python
python pandas中DataFrame类型数据操作函数的方法
2018/04/08 Python
django 实现编写控制登录和访问权限控制的中间件方法
2019/01/15 Python
python之pymysql模块简单应用示例代码
2019/12/16 Python
Python unittest discover批量执行代码实例
2020/09/08 Python
CSS3 3D旋转rotate效果实例介绍
2016/05/03 HTML / CSS
HTML5之SVG 2D入门5—颜色的表示及定义方式
2013/01/30 HTML / CSS
使用Html5 Stream开发实时监控系统
2020/06/02 HTML / CSS
索桥的故事教学反思
2014/02/06 职场文书
销售个人求职信范文
2014/04/28 职场文书
婚庆公司计划书
2014/09/15 职场文书
个人委托书如何写
2014/09/25 职场文书
学习退步检讨书
2014/09/28 职场文书
圆明园观后感
2015/06/03 职场文书
2019年度行政文员工作计划范本!
2019/07/04 职场文书
聊聊mysql都有哪几种分区方式
2022/04/13 MySQL