程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 使用PostgreSQL的bytea字段存讀取文件及讀取出錯問題處理

使用PostgreSQL的bytea字段存讀取文件及讀取出錯問題處理

編輯:關於PHP編程

  PostgreSQL中的bytea字段類型可以以二進制的形式存儲數據,這樣做的好處就是可以將原本存儲在網站目錄下的文件存儲到數據庫中,壞處就是如果文件過多、過大的話,就會導致數據庫的數據量大大增加,備份和恢復的時候就會浪費大量的時間,而且數據也有可能會出錯。個人覺得,在文件量小的情況下,使用這種存儲方式還是很方便的。

  言歸正傳,下面介紹一下使用bytea字段存讀取文件的具體實現方法。首先是文件存儲於存儲於bytea字段的方法,主要用到的就是PHP中的pg_escape_bytea方法,代碼如下:

<? = pg_connect("host='localhost' dbname='dbname' user='user' password='password' port='port'"('Could not connect:' . = ("utf-8", "gbk", );
 = ( = pg_escape_bytea();
 = "}')", ?>

   從bytea字段中還原文件用到的是PHP中的pg_unescape_bytea方法,實現代碼如下:

<? = pg_connect("host='localhost' dbname='dbname' user='user' password='password' port='port'"('Could not connect: ' . = "" . ;
     = pg_query(, ( = pg_fetch_array(, , = ['contents' = pg_unescape_bytea(); 
        (, ); 
?>

   導出文件後,如果二進制數據轉碼錯誤就會出現文件打不開的現象,比如錯誤的PDF文件打開時彈出錯誤如下圖:

  這種錯誤在數據庫遷移時特別容易出現(本人是從PostgreSQL 8.4遷移到9.1),解決的方法是修改PostgreSQL的配置文件
postgresql.conf,將bytea_output的輸出類型設置為轉義類型(escape)輸出,即bytea_output = 'escape'(如果前面有#,刪除開啟配置),然後reload一下PostgreSQL的配置使修改生效,這樣二進制數據就可以正常解碼並輸出到文件。 

 

博客聲明:

  本博客中的所有文章,除標題中注明“轉載”字樣外,其余所有文章均為本人原創或在查閱資料後總結完成,引用非轉載文章時請注明此聲明。—— 博客園-pallee

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved