PHP实现在PostgreSQL里的Bytea字段中读写文献或图片

  将近花了两天实现,实现了空间化文献的批量上传。原来文献是以文件的形式存放在网站目录下的文件夹里的,后来改为存放到PostgreSQL的Bytea字段中,该字段相当于ORACLE的BLOB或CLOB字段,是以二级制形式存放数据,最大存放2G数据。

  自己对PHP编程不熟,是在查阅大量参考资料后,依葫芦画瓢才搞定的Postgesql数据库Bytea字段的读、写操作。现在与大家分享一下:

  首先,PHP连接Postgresql数据库,需要修改PHP安装目录下的php.ini文件,启用 extension=php_pdo_pgsql.dll 和extension=php_pgsql.dll。

// 创建数据库连接
function  CreatePGConnect()
{        
$host = " localhost " ;
$port = " 5432 " ;
$dbname = " glc " ;
$user = " postgres " ;
$password = " gxsnprg2010 " ;
$dbconn = pg_connect( " host= $host  port= $port  dbname= $dbname  user= $user  password= $password " );
return   $dbconn ;
}

 

 

  将文献数据写入Bytea字段关键代码

  $dbconn=CreatePGConnect(); //数据库连接    
  // 将文件插入数据库的tb_doc_res_data
     $tmpFile = iconv ( " utf-8 " , " gbk " , $tmpFile );  // $tmpFile为文件名,此处为处理中文乱码
         $data = file_get_contents (UPLOAD_FILE_PATH . $tmpFile ); // 文献的完整路径
     $escaped = pg_escape_bytea( $data );  // 关键处
     $insertSQL = " insert into tb_doc_res_data values( " . $tb_docmaxid . " ,'{ $escaped }') " ;
    
$result3 = pg_query( $dbconn , $insertSQL );  // 执行插入语句命令

 

   读取Bytea字段值,并保存为PDF文件

ExpandedBlockStart.gif 代码
    // /将文件从数据库中读出
     function  readBlob()
    {
    
$dbconn = CreatePGConnect();  // 数据库连接
     $insertSQL = " select filecontent from tb_doc_res_data where DocID=5 " ; // 查询语句
     $query = pg_query( $dbconn , $insertSQL );
    
$row = pg_fetch_result( $query , ' filecontent ' );

    
$filecontent = pg_unescape_bytea( $row );  // 获得二进制数据
     file_put_contents (UPLOAD_FILE_PATH . ' 11.pdf ' , $filecontent );  // 将二进制数据转为PDF文件
     return   " OK " ;
    }

 

 

参考资料:

http://php.net/manual/en/function.pg-unescape-bytea.php

http://www.phpf1.com/manual/pg-escape-bytea.html

http://www.phpf1.com/manual/pg-unescape-bytea.html

http://bytes.com/topic/php/answers/157633-storing-images-postgresql-php

http://www.zephid.dk/2008/08/09/oid-vs-bytea-in-postgresql/

 http://www.zhougang.name/?p=395

本博客声明:本人的技术探索过程中,得到了国信司南公司方面支持。今后,本人博客里的所有技术探索成果将归“无痕客”、“国信司南”和“博客园”三方共同所有,原创作品如需转载,请注明本博客声明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值