PHP的PDO大对象(LOBs)
PHPPDO大对象(LOBs)
应用程序在某一时刻,可能需要在数据库中存储"大"数据。
"大"通常意味着"大约4kb或以上",尽管某些数据库在数据达到"大"之前可以轻松地处理多达32kb的数据。大对象本质上可能是文本或二进制。
在PDOStatement::bindParam()或PDOStatement::bindColumn())调用中使用PDO::PARAM_LOB类型码可以让PDO使用大数据类型。
PDO::PARAM_LOB告诉PDO作为流来映射数据,以便能使用PHPStreamsAPI来操作。
从数据库中显示一张图片
下面例子绑定一个LOB到$lob变量,然后用fpassthru()将其发送到浏览器。因为LOB代表一个流,所以类似fgets()、fread()以及stream_get_contents()这样的函数都可以用在它上面。
prepare("selectcontenttype,imagedatafromimageswhereid=?"); $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尽可能地让数据库以最有效的方式获取文件内容。
prepare("insertintoimages(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长度被隐式提交:
prepare("insertintoimages(id,contenttype,imagedata)". "VALUES(?,?,EMPTY_BLOB())RETURNINGimagedataINTO?"); $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(); ?>
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接