首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 連接與操作 PostgreSQL 數據庫完整示例:查詢、插入、獲取結果集

     編輯:PHP 相關知識

PHP 連接與操作 PostgreSQL 數據庫完整示例

PostgreSQL 功能強大、標準兼容性好。PHP 通過 pgsql 擴展提供原生函數族(pg_connect、pg_query、pg_fetch_* 等)進行操作。本文提供從連接到增刪改查的完整可運行代碼。

完整代碼示例

<?php
// 1. 連接數據庫
$pg = @pg_connect("host=localhost user=postgres password=sa dbname=employes")
    or die("can't connect to database.");

// 2. 執行查詢
$query = "SELECT * FROM employes ORDER BY serial_no";
$result = @pg_query($pg, $query) or die("can't run query to table.");

// 3. 獲取行數
echo "查詢到記錄數: " . pg_num_rows($result) . "
"; // 4. 遍歷結果集 - 方式一:pg_fetch_row (數字索引) echo "<table border=1><tr><td>serial_no</td><td>name</td><td>birthday</td></tr>"; for ($i = 0; $i < pg_num_rows($result); $i++) { $row = @pg_fetch_row($result) or die("can't fetch row."); list($serial_no, $name, $birthday) = $row; echo "<tr><td>$serial_no</td><td>$name</td><td>$birthday</td></tr>"; } echo "</table>"; // 5. 方式二:pg_fetch_array (關聯/數字雙索引) - 註釋備用 /* echo "<table border=1><tr><td>serial_no</td><td>name</td><td>birthday</td></tr>"; for ($i = 0; $i < pg_num_rows($result); $i++) { $row = @pg_fetch_array($result); echo "<tr><td>{$row['serial_no']}</td><td>{$row['name']}</td><td>{$row['birthday']}</td></tr>"; } echo "</table>"; */ // 6. 插入示例(預處理參數化寫法更安全,此處為演示) /* $newrow = [ "serial_no" => "1006", "name" => "peter", "birthday" => "1990-07-03", "salary" => "90", "bonus" => "80" ]; $res = @pg_insert($pg, "employes", $newrow) or die("can't insert data."); if ($res) echo "插入成功!"; */ // 7. 關閉連接 pg_close($pg); ?>

核心函數速查表

函數用途備註
pg_connect(conn_str)建立連接支持 host/port/dbname/user/password/sslmode 等參數
pg_query(conn, sql)執行 SQL返回資源,失敗返回 false
pg_num_rows(result)結果集行數僅適用 SELECT
pg_fetch_row(result)取一行(數字索引)適合性能敏感場景
pg_fetch_array(result, type)取一行(雙索引)type: PGSQL_ASSOC/PGSQL_NUM/PGSQL_BOTH
pg_fetch_assoc(result)取一行(關聯索引)最常用,可讀性好
pg_fetch_object(result, class)取一行映射為對象可指定類名,自動實例化
pg_affected_rows(result)影響行數INSERT/UPDATE/DELETE
pg_insert/pg_update/pg_delete便捷增刪改自動轉義,但建議改用預處理
pg_prepare/pg_execute預處理語句防注入、重複執行高效
pg_close(conn)關閉連接腳本結束自動關閉,顯式調用更好

最佳實踐建議

  1. 生產環境必須使用預處理:pg_prepare() + pg_execute(),徹底防止 SQL 注入。
  2. 錯誤處理:開啟 pg_set_error_verbosity(PGSQL_ERRORS_VERBOSE),記錄詳細錯誤日誌。
  3. 連接池:高併發場景配合 PgBouncer 或 PHP-FPM 持久連接(pgsql.allow_persistent=On)。
  4. 類型映射:PostgreSQL 豐富類型(JSONB、UUID、數組、幾何類型)需在 PHP 端正確解析,建議使用成熟 ORM(如 Doctrine、Eloquent)或封裝層。
  5. 事務控制:pg_query("BEGIN")、pg_query("COMMIT")/pg_query("ROLLBACK")。

掌握原生函數是理解底層交互的基礎,實際項目建議封裝為 Repository 模式或引入 ORM,提升開發效率與代碼質量。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved