广告
返回顶部
首页 > 资讯 > 数据库 >PDO中操作大数据对象的方法
  • 484
分享到

PDO中操作大数据对象的方法

2024-04-02 19:04:59 484人浏览 薄情痞子
摘要

这篇文章主要介绍了PDO中操作大数据对象的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。PDO操作大数据对象一般在数据库中,我们保存的都

这篇文章主要介绍了PDO中操作大数据对象的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

PDO操作大数据对象

一般在数据库中,我们保存的都只是 int 、 varchar 类型的数据,一是因为现代的关系型数据库对于这些内容会有很多的优化,二是大部分的索引也无法施加在内容过多的字段上,比如说 text 类型的字段就很不适合创建索引。所以,我们在使用数据库时,很少会向数据库中存储很大的内容字段。但是,Mysql 其实也为我们准备了这种类型的存储,只是我们平常用得不多而已。今天我们就来学习了解一下使用 PDO 如何操作 mysql 中的大数据对象。

什么是大数据对象

“大”通常意味着“大约 4kb 或以上”,尽管某些数据库在数据达到“大”之前可以轻松地处理多达 32kb 的数据。大对象本质上可能是文本或二进制形式的,我们在 PDOStatement::bindParam() 或 PDOStatement::bindColumn() 调用中使用 PDO::PARAM_LOB 类型码可以让 PDO 使用大数据类型。PDO::PARAM_LOB 告诉 PDO 作为流来映射数据,以便能使用 PHP Streams api 来操作。

对于 Mysql 来说,将字段类型设置为 blob 即是大对象格式的字段。而在 bindParam() 或 bindColumn() 时,指定字段的参数为 PDO::PARAM_LOB 类型,就可以直接以句柄形式获得这个对象里面的内容,就像 fopen() 一样地继续对它进行操作。

CREATE TABLE `zy_blob` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `attach` longblob,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

这是我们测试用的一个数据表,将 attach 字段设置为了 longblob 类型,也就是比较大的 blob 类型,这样我们就可以存储更多地信息。毕竟现在的图片或文件随随便便就是轻松地几m或几十m起步的,我们直接使用最大的 blob 类型来进行简单地测试。tinyblob 的大小为 255 字节,blob 类型的大小为 65k ,mediumblob 为 16M ,longblob 为 4G 。

直接操作大数据对象会怎么样?

我们先来简单地直接操作大数据对象,看看是什么样的结果。

$stmt = $pdo->prepare("insert into zy_blob (attach) values (?)");
$fp = fopen('4960364865db53Dcb33bcf.rar', 'rb');
$stmt->execute([$fp]);

$stmt = $pdo->query("select attach from zy_blob where id=1");
$file = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($file); 
// Array
// (
//     [attach] => Resource id #6
// )

在这段代码中,我们没有绑定字段,然后直接将 fopen() 打开的文件存储到 blob 字段中。可以看出,在数据库中,blob 相关的字段只是存储了 Resource id #6 这样的字符串。也就是说,在不做任何处理的情况下,$fp 句柄被强制转换成了字符串类型,而句柄类型被强转的结果就是只会输出一个资源ID,而 blob 也只是和字符类型的字段一样记录了这个字符串而已。

正确的姿势

接下来我们来看看正确的姿势,也就是通过 bindParam() 来插入数据,通过 bindColumn() 来读取数据。

$stmt = $pdo->prepare("insert into zy_blob (attach) values (?)");

$fp = fopen('4960364865db53dcb33bcf.rar', 'rb');

$stmt->bindParam(1, $fp, PDO::PARAM_LOB); // 绑定参数类型为 PDO::PARAM_LOB
$stmt->execute();

$stmt = $pdo->prepare("select attach from zy_blob where id=2");
// // $file = $stmt->fetch(PDO::FETCH_ASSOC);
// // print_r($file); // 空的
$stmt->execute();
$stmt->bindColumn(1, $file, PDO::PARAM_LOB); // 绑定一列到一个 php 变量
$stmt->fetch(PDO::FETCH_BOUND); // 指定获取方式,返回 TRUE 且将结果集中的列值分配给通过 PDOStatement::bindParam() 或 PDOStatement::bindColumn() 方法绑定的 PHP 变量
print_r($file); // 二进制乱码内容
$fp = fopen('a.rar', 'wb');
fwrite($fp, $file);

首先,我们通过 bindParam() 绑定数据,并指定 PDO::PARAM_LOB 类型之后,就正常地向数据库里插入了文件的句柄二进制内容。接着,我们使用 bindColumn() 并且也指定 PDO::PARAM_LOB 类型来获得查询出来的数据。直接打印查询出来的字段信息,就可以看到它是二进制的类型内容。最后,我们将这个二进制内容保存成另一个名称的文件。

大家可以替换上面的文件内容,然后执行代码来看看最后生成的文件是不是和原来的文件一样的。我这里使用的是一个压缩包文件,最后生成的 a.rar 文件和原始文件大小以及解压后的内容都是完全一致的。

总结

大数据对象操作的究竟是什么呢?其实就是我们平常要保存的大文件。我们将这些文件以二进制流的方式读取到程序后,再将它们保存在数据库的字段中。想想我们平常开发用到的最多的图片保存就可以用这个来做。但是,此处可以划重点了,我们更加推荐的还是将文件直接保存在文件目录中,而数据库中只保存它们的路径就可以了。数据库资源是宝贵的,表越大越不利于优化,而且数据库本身还有缓存机制,浪费它的资源来保存这种大型的文件其实是得不偿失的。当然,如果有某些特殊的需要,比如一些私密文件不想直接在硬盘文件目录中保存,或者做为临时的跨服务器存储方案都是可以的。

在现代开发中,相信你的公司也不会吝啬到不去买一个云存储(七牛、upyun、阿里云OSS)。它们不仅仅是能够做为一个存储器、网盘,而是有更多的功能,比如图片的裁剪、水印,赠送的 CDN 、带宽 、 流量之类的,总之,现代的存储大家还是尽量上云吧,即使是个人开发,也有不少厂商会提供小流量小数据量情况下的免费使用,这个都比我们自己来要方便很多。

感谢你能够认真阅读完这篇文章,希望小编分享的“PDO中操作大数据对象的方法”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网数据库频道,更多相关知识等着你来学习!

您可能感兴趣的文档:

--结束END--

本文标题: PDO中操作大数据对象的方法

本文链接: https://www.lsjlt.com/news/55929.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PDO中操作大数据对象的方法
    这篇文章主要介绍了PDO中操作大数据对象的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。PDO操作大数据对象一般在数据库中,我们保存的都...
    99+
    2022-10-18
  • php如何用PDO操作大数据对象
    目录什么是大数据对象直接操作大数据对象会怎么样?正确的姿势总结什么是大数据对象 “大”通常意味着“大约 4kb 或以上”,尽管某些数据库在数据达到“大”之前可以轻松地处理多达 32...
    99+
    2022-11-12
  • PHP PDO操作数据库的方法有哪些
    这篇文章主要介绍了PHP PDO操作数据库的方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇PHP PDO操作数据库的方法有哪些文章都会有所收获,下面我们一起来看看吧。安装 PDO 扩展在开始之前,请确...
    99+
    2023-07-05
  • JavaScript中sessionStorage对象操作的方法
    这篇“JavaScript中sessionStorage对象操作的方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获...
    99+
    2022-10-19
  • Java如何处理大数据中的对象操作问题?
    随着数据量的不断增大,Java在处理大数据中的对象操作问题上面也会遇到一些困难。本文将介绍Java中处理大数据中的对象操作问题,并提供一些代码示例。 一、使用缓存来优化对象操作 在处理大数据量时,Java中的对象操作会变得十分缓慢,因为内...
    99+
    2023-10-12
    大数据 对象 numpy
  • 查看MySQL中对象的操作方法
    下面讲讲关于查看MySQL中对象的操作方法,文字的奥妙在于贴近主题相关。所以,闲话就不谈了,我们直接看下文吧,相信看完查看MySQL中对象的操作方法这篇文章你一定会有所受益。表: selec...
    99+
    2022-10-18
  • JavaScript中操作对象的方法是怎样的
    本篇文章给大家分享的是有关JavaScript中操作对象的方法是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Object.create...
    99+
    2022-10-19
  • Python中对数据库的操作方法是什么
    今天小编给大家分享一下Python中对数据库的操作方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、数据库介绍1、...
    99+
    2023-07-05
  • PHP中面向对象的数据库操作类
        在PHP的面向过程中,我们可以通过封装函数来实现对数据库的操作,那么在面向过程中,我们同样可以通过类来实现对数据库的操作,整个过程和面向过程的思路大体差不多,...
    99+
    2022-10-18
  • JavaScript中cookie操作对象的应用方法有哪些
    本篇内容主要讲解“JavaScript中cookie操作对象的应用方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript中cookie操作...
    99+
    2022-10-19
  • Python列表对象中元素的删除操作方法
    目录1.列表元素删操作的方法2.调用remove方法一次删除一个指定的元素3.调用pop方法一次只删除一个指定索引的元素3.1.使用pop方法删除列表中索引为2的元素3.2.使用po...
    99+
    2022-12-21
    Python列表元素删除操作 Python列表操作 Python列表元素
  • 详解处理Java中的大对象的方法
    目录String中的substring集合大对象扩容保持合适的对象粒度Bitmap 把对象变小数据的冷热分离数据双写写入 MQ 分发使用 Binlog 同步思维发散小结本文我们将讲解...
    99+
    2022-11-13
  • 你有没有掌握Python读取大数据文件中对象的方法?
    Python作为一种强大的编程语言,拥有许多功能丰富的模块和库,可用于处理各种类型的数据。在大数据领域,Python也是一种常用的工具,因为它可以轻松地读取和处理大数据文件。但是,当处理大数据文件时,读取对象是一个常见的挑战。在这篇文章中,...
    99+
    2023-10-26
    对象 文件 大数据
  • Struts2实现对action请求对象的拦截操作方法
    Struts2的核心功能是action,对于开发人员来说,使用Struts2主要就是编写action,action类通常都要实现com.opensymphony.xwork2.Action接口,并实现该接口中的execute()方法。该方法...
    99+
    2023-05-30
    struts2 action
  • navicat中对数据库进行操作的方法有哪些
    这篇文章主要介绍navicat中对数据库进行操作的方法有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一,navicat如何写sql语句查询?方法1:ctrl+q就会弹出一个sq...
    99+
    2022-10-18
  • Python中的数组容器对象有哪些常见的操作和方法?
    在Python中,数组是一种常见的数据结构,它可以容纳一组有序的元素,并且可以进行一些常见的操作和方法。Python提供了多种类型的数组容器对象,如列表、元组、数组等,这些容器对象在使用方法和操作上略有不同。本文将介绍Python中常见的...
    99+
    2023-08-20
    数组 容器 对象
  • JavaScript遍历json对象数据的方法
    JSON中,有两种结构:对象和数组,对象是没有length这个属性,而数组结构是有的,下面说明一下用遍历方式获取属性值的方法。 获取属性名、属性值 <!DOCTYPE html...
    99+
    2022-11-13
  • PHP中PDO是什么,其对象使用的常见方法是什么
    本篇内容介绍了“PHP中PDO是什么,其对象使用的常见方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!PDO是什么PDO是别人写的“...
    99+
    2023-06-20
  • 详解Python中的__getitem__方法与slice对象的切片操作
    Fib实例虽然能作用于for循环,看起来和list有点像,但是,把它当成list来使用还是不行,比如,取第5个元素: >>> Fib()[5] Traceback (most rece...
    99+
    2022-06-04
    切片 详解 对象
  • JS数组操作大全对象数组根据某个相同的字段分组
    目录先说点废话目标对象数组准换后的对象数组编写函数的思路方法一方法二拓展————ES6的新方法Object.keys先说点废话 最近在...
    99+
    2022-11-13
    js对象数组根据字段分组 js对象数组 js数组操作
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作