设为首页 收藏本站
查看: 1076|回复: 0

[经验分享] PHP实现在PostgreSQL里的Bytea字段中读写文献或图片

[复制链接]

尚未签到

发表于 2016-11-21 11:03:56 | 显示全部楼层 |阅读模式
  将近花了两天实现,实现了空间化文献的批量上传。原来文献是以文件的形式存放在网站目录下的文件夹里的,后来改为存放到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文件

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-303407-1-1.html 上篇帖子: Ibatis.net + Npgsql +PostgreSql 多线程“Timeout while getting a connection from pool 下篇帖子: PostgreSQL学习笔记YY(3)--pgpool中间件的介绍(翻译)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表