PHP實現在PostgreSQL裡的Bytea欄位中讀寫文獻或圖片

來源:互聯網
上載者:User

  將近花了兩天實現,實現了空間化文獻的批量上傳。原來文獻是以檔案的形式存放在網站目錄下的檔案夾裡的,後來改為存放到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

本部落格聲明:本人的技術探索過程中,得到了國信司南公司方面支援。今後,本人部落格裡的所有技術探索成果將歸“無痕客”、“國信司南”和“部落格園”三方共同所有,原創作品如需轉載,請註明本部落格聲明。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.