用PDO存取图片等大数据对象

7 篇文章 0 订阅

什么是大数据对象?php官方给的定义是“大约4kb 或以上”,也就是说如果存储到数据库表里面的数据若大于4kb以上则称为大数据对象例如图片,视频等。

一般我们存储图片和视频等大数据是这样的:

把图片或视频上传到服务器,然后,把图片或视频的路径保存到数据库表里面,当查询时可以搜索一下数据库表,然后,拼接一个图片或视频路径,显示到浏览器上面。

pdo存储大数据对象则是直接把图片、视频等大数据对象保存到数据库表里面。

注意:

这与上面只保存图片或视频的路径有跟本区别,直接保存到数据库表里面一般情况下是不需要这样做的,很少有这种需要,但是,既然php官方给出这个解决方法肯定以后会用到,所以,我们也要做一个教程来讲解一下pdo如何把大数据对象插入到数据库表里面。

Example 插入一张图片到数据库
<?php
    //创建对象
$pdo=new PDO("mysql:host=localhost:3306;dbname=mydb","root","password");
$stmt = $pdo->prepare("insert into images (id, contenttype, imagedata) values (?, ?, ?)");
$id = get_new_id(); // 调用某个函数来分配一个新 ID

$fp = fopen($_FILES['file']['tmp_name'], 'rb');

$stmt->bindParam(1, $id);
$stmt->bindParam(2, $_FILES['file']['type']);  //图片类型
$stmt->bindParam(3, $fp, PDO::PARAM_LOB);  //图片二进制数据

$pdo->beginTransaction();
$stmt->execute();
$pdo->commit();
?>
<?php
    //创建对象
    $pdo=new PDO("mysql:host=localhost:3306;dbname=mydb","root","password");
$stmt=$pdo->prepare("select mimetype,data from images where id=?");
$stmt=execute(array(1));

list($mimetype,$data)=fetch(PDO::FETCH_NUM);

header("Content-Type:{$mimetype}");

echo $data;
?>

代码分析:

  1. 数据库:上面是官方给的一个例子,使用的是odbc数据库驱动,也就是使用的是odbc数据库,如果您不是odbc请换上您的驱动,并填写好自己的主机、数据库、编码等信息。
  2. 只使用函数fopen():上面使用php函数fopen()打开上传的图片,并且以”rb”方式打开,打开后就可以了不用使用其它php函数读取里面的图片内容。
  3. 数据类型PDO::PARAM_LOB:在绑定参数时使用绑定函数的第三个参数PDO::PARAM_LOB,用来表示是LOB大数据对象。
  4. 使用事务处理:上面虽然是一段简单的存储大数据对象的代码,并没有涉及到钱等敏感的数据,但是,也使用了事务处理,这样至少看上去非常专业和标准。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值