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的宝库目录--PEAR
Oct 09 PHP
一个用mysql_odbc和php写的serach数据库程序
Oct 09 PHP
php 动态多文件上传
Jan 18 PHP
纯真IP数据库的应用 IP地址转化成十进制
Jun 14 PHP
php simplexmlElement操作xml的命名空间实现代码
Jan 04 PHP
PHP转换文件夹下所有文件编码的实现代码
Jun 06 PHP
解析php addslashes()与addclashes()函数的区别和比较
Jun 24 PHP
如何让thinkphp在模型中自动完成session赋值小教程
Sep 05 PHP
PHP中substr函数字符串截取用法分析
Jan 07 PHP
php抽奖概率算法(刮刮卡,大转盘)
Apr 17 PHP
PHP 文件上传后端处理实用技巧方法
Jan 06 PHP
PHP实现简单注册登录系统
Dec 28 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限制上传文件类型并保存上传文件的方法
2015/03/13 PHP
php使用socket post数据到其它web服务器的方法
2015/06/02 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
2016/09/11 PHP
ThinkPHP删除栏目(实现批量删除栏目)
2017/06/21 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
javascript KeyDown、KeyPress和KeyUp事件的区别与联系
2009/12/03 Javascript
jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
2014/05/22 Javascript
JQuery基础语法小结
2015/02/27 Javascript
JavaScript文本框脚本编写的注意事项
2016/01/25 Javascript
JavaScript 对象详细整理总结
2016/09/29 Javascript
AngularJS中transclude用法详解
2016/11/03 Javascript
JavaScript仿支付宝6位数字密码输入框
2016/12/29 Javascript
BootStrap组件之进度条的基本用法
2017/01/19 Javascript
Webpack执行命令参数详解
2017/06/17 Javascript
对于Javascript 执行上下文的全面了解
2017/09/05 Javascript
浅谈AngularJs 双向绑定原理(数据绑定机制)
2017/12/07 Javascript
微信小程序实现工作时间段选择
2019/02/15 Javascript
写一个Vue loading 插件
2020/11/09 Javascript
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
Python如何实现文本转语音
2016/08/08 Python
python 矩阵增加一行或一列的实例
2018/04/04 Python
简单了解python关系(比较)运算符
2019/07/08 Python
Python中join()函数多种操作代码实例
2020/01/13 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
2020/03/06 Python
Python使用monkey.patch_all()解决协程阻塞问题
2020/04/15 Python
使用Pycharm(Python工具)新建项目及创建Python文件的教程
2020/04/26 Python
JavaScript+Canvas实现自定义画板的示例代码
2019/05/13 HTML / CSS
C语言中一个结构不能包含指向自己的指针吗
2012/05/25 面试题
密封类可以有虚函数吗
2014/08/11 面试题
个人简历自我评价范文
2014/02/04 职场文书
离婚协议书怎么写的
2014/12/14 职场文书
交通安全教育主题班会
2015/08/12 职场文书
Web前端:CSS最强总结 附详细代码
2021/03/31 HTML / CSS
Pandas自定义选项option设置
2021/07/25 Python
为自由献出你的心脏!「进击的巨人展 FINAL」2022年6月在台开展
2022/04/13 日漫
详解Go语言中Get/Post请求测试
2022/06/01 Golang