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地址
Dec 20 PHP
PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
May 07 PHP
php漏洞之跨网站请求伪造与防止伪造方法
Aug 15 PHP
php实现随机生成易于记忆的密码
Jun 19 PHP
php实现Mysql简易操作类
Oct 11 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
Nov 27 PHP
PHP版单点登陆实现方案的实例
Nov 17 PHP
PHP获取路径和目录的方法总结【必看篇】
Mar 04 PHP
PHP解决中文乱码
Apr 28 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
Aug 14 PHP
PDO操作MySQL的基础教程(推荐)
Aug 18 PHP
通过实例解析PHP数据类型转换方法
Jul 11 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 for 循环语句使用方法详细说明
2010/05/09 PHP
PHP常用特殊运算符号和函数总结(php新手入门必看)
2013/02/02 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
2015/12/25 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
2016/03/01 PHP
PHP实现加密文本文件并限制特定页面的存取的效果
2016/10/21 PHP
PHP实现网站应用微信登录功能详解
2019/04/11 PHP
ASP中进行HTML数据及JS数据编码函数
2009/11/11 Javascript
jQuery下通过$.browser来判断浏览器.
2011/04/05 Javascript
解析javascript 浏览器关闭事件
2013/07/08 Javascript
javascript表格的渲染组件
2015/07/03 Javascript
Javascript设计模式之观察者模式(推荐)
2016/03/29 Javascript
JS中使用apply方法通过不同数量的参数调用函数的方法
2016/05/31 Javascript
JavaScript基础——使用Canvas绘图
2016/11/02 Javascript
js判断用户是输入的地址请求的路径(实例讲解)
2017/07/18 Javascript
js神秘的电报密码 哈弗曼编码实现
2019/09/10 Javascript
layui实现下拉复选功能的例子(包括数据的回显与上传)
2019/09/24 Javascript
vue element 中的table动态渲染实现(动态表头)
2019/11/21 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
2020/12/01 Javascript
多个Vue项目部署到服务器的步骤记录
2020/10/22 Javascript
Python开发实例分享bt种子爬虫程序和种子解析
2014/05/21 Python
代码讲解Python对Windows服务进行监控
2018/02/11 Python
selenium+python 去除启动的黑色cmd窗口方法
2018/05/22 Python
对python判断ip是否可达的实例详解
2019/01/31 Python
python实现学员管理系统
2019/02/26 Python
django中使用Celery 布式任务队列过程详解
2019/07/29 Python
python 魔法函数实例及解析
2019/09/25 Python
python中with用法讲解
2020/02/07 Python
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
捷克移动配件网上商店:ProMobily.cz
2019/03/15 全球购物
党的群众路线教育实践活动宣传方案
2014/02/23 职场文书
副董事长岗位职责
2014/04/02 职场文书
节能减耗标语
2014/06/21 职场文书
追悼会家属答谢词
2015/09/29 职场文书
调研报告的主要写法
2019/04/18 职场文书
pandas 操作 Excel操作总结
2021/03/31 Python
go设置多个GOPATH的方式
2021/05/05 Golang