• 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文件

    代码
       ///将文件从数据库中读出
        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

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

  • 相关阅读:
    ZooKeeper详解
    数据结构与算法2——数组
    jquery复习笔记
    关于水平居中
    回顾这些日子
    阻止事件冒泡
    css导航栏
    js正则
    js事件绑定
    操作iframe
  • 原文地址:https://www.cnblogs.com/wuhenke/p/1864849.html
Copyright © 2020-2023  润新知