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中文URL编解码(urlencode()rawurlencode()
Jul 03 PHP
发款php蜘蛛统计插件只要有mysql就可用
Oct 12 PHP
PHP几个数学计算的内部函数学习整理
Aug 06 PHP
解析PHP中intval()等int转换时的意外异常情况
Jun 21 PHP
深入extjs与php参数交互的详解
Jun 25 PHP
php switch语句多个值匹配同一代码块应用示例
Jul 29 PHP
php可应用于面包屑导航的迭代寻找家谱树实现方法
Feb 02 PHP
老生常谈PHP面向对象之命令模式(必看篇)
May 24 PHP
详解Yii2.0使用AR联表查询实例
Jun 16 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
Feb 23 PHP
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
Apr 01 PHP
php中pcntl_fork详解
Apr 01 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中去除所有js,html,css代码
2010/10/12 PHP
PHP 字符串正则替换函数preg_replace使用说明
2011/07/15 PHP
关于更改Zend Studio/Eclipse代码风格主题的介绍
2013/06/23 PHP
Java中final关键字详解
2015/08/10 PHP
thinkphp自定义权限管理之名称判断方法
2017/04/01 PHP
Yii2数据库操作常用方法小结
2017/05/04 PHP
ThinkPHP5框架实现简单的批量查询功能示例
2018/06/07 PHP
jQuery Ajax 全解析
2009/02/08 Javascript
JS图片无缝滚动(简单利于使用)
2013/06/17 Javascript
jQuery实现鼠标经过图片变亮其他变暗效果
2015/05/08 Javascript
基于jQuery实现的无刷新表格分页实例
2016/02/17 Javascript
一种基于浏览器的自动小票机打印实现方案(js版)
2016/07/26 Javascript
js实现适合新闻类图片的轮播效果
2017/02/05 Javascript
canvas红包照片实例分享
2017/02/28 Javascript
React学习之事件绑定的几种方法对比
2017/09/24 Javascript
解决vue2.0动态绑定图片src属性值初始化时报错的问题
2018/03/14 Javascript
使用Vue-cli 3.0搭建Vue项目的方法
2018/06/07 Javascript
理顺8个版本vue的区别(小结)
2018/09/17 Javascript
Javascript表单序列化原理及实现代码详解
2020/10/30 Javascript
vue中如何自定义右键菜单详解
2020/12/08 Vue.js
[02:05]2014DOTA2西雅图国际邀请赛 BBC第二天小组赛总结
2014/07/11 DOTA
Android分包MultiDex策略详解
2017/10/30 Python
python实现报表自动化详解
2017/11/16 Python
Python实现基本数据结构中栈的操作示例
2017/12/04 Python
python Jupyter运行时间实例过程解析
2019/12/13 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
2020/01/04 Python
python爬虫要用到的库总结
2020/07/28 Python
pycharm配置python 设置pip安装源为豆瓣源
2021/02/05 Python
英国水族馆和池塘用品购物网站:Warehouse Aquatics
2019/08/29 全球购物
AOP的定义以及作用
2013/09/08 面试题
一年级家长会邀请函
2014/01/25 职场文书
历史专业学生的自我评价
2014/02/28 职场文书
继续教育个人总结
2015/03/03 职场文书
幼儿园亲子活动通知
2015/04/24 职场文书
详细谈谈JavaScript中循环之间的差异
2021/08/23 Javascript
使用Ajax实现进度条的绘制
2022/04/07 Javascript