php_pgsql 接口 1.簡介 php_pgsql 是 PostgreSQL 的 PHP 擴展,允許 PHP 腳本與 PostgreSQL 數(shù)據(jù)庫交互。
HighGo 數(shù)據(jù)庫提供了對 php_pgsql 特性的支持,并且支持連接認證方式為國密 SM3。
2.下載配置PHP 與 瀚高驅(qū)動 2.1.下載地址 鏈接:https://pan.baidu.com/s/1xuz6uJz0utRgKWecXhpOiA?pwd=o0tj
2.2.Windows 環(huán)境
前提條件,確保已安裝php對應(yīng)版本的 php_pgsql.dll 擴展。
下載對應(yīng)版本的libpq.dll,上傳位置為 PHP 安裝根目錄。
修改php.ini,去掉“extension=pgsql”前的分號。
終端執(zhí)行 php -m ,查看輸出列表是否有“pgsql”,如果有表示加載成功,沒有表示加載失敗
2.3.Linux 環(huán)境
下載對應(yīng)版本驅(qū)動
上傳服務(wù)器 /opt/highgolib 并解壓
Text tar -zxvf v458_driver_for_php-7.4.33_x86_64.tar.gz
修改php.ini,引入擴展
Text extension= /opt/highgolib/pgsql.so
終端執(zhí)行 php -m ,查看輸出列表是否有“ pgsql”,如果有表示加載成功,沒有表示加載失敗
3.php_pgsql接口API 以下是重要的 PHP 例程,它們可以滿足您在 PHP 程序中使用 HighGo 數(shù)據(jù)庫的要求。 如果您正在尋找更復(fù)雜的應(yīng)用程序,那么您可以查看 PHP 官方文檔。
API和描述
resource pg_connect ( string $connection_string [, int $connect_type ] ) 這將打開到由 connection_string 指定的 HighGo 數(shù)據(jù)庫的連接。 如果 PGSQL_CONNECT_FORCE_NEW 作為 connect_type 傳遞,那么在第二次調(diào)用 pg_connect() 時會創(chuàng)建一個新連接,即使 connection_string 與現(xiàn)有連接相同。
bool pg_connection_reset ( resource $connection ) 此例程重置連接。 它對于錯誤恢復(fù)很有用。 成功時返回 TRUE,失敗時返回 FALSE。
int pg_connection_status ( resource $connection ) 此例程返回指定連接的狀態(tài)。 返回 PGSQL_CONNECTION_OK 或 PGSQL_CONNECTION_BAD。
string pg_dbname ([ resource $connection ] ) 此例程返回給定 HighGo 連接資源的數(shù)據(jù)庫的名稱。
resource pg_prepare ([ resource $connection ], string $stmtname, string $query ) 這會提交一個請求以使用給定的參數(shù)創(chuàng)建一個準備好的語句并等待完成。
resource pg_execute ([ resource $connection ], string $stmtname, array $params ) 該例程發(fā)送請求以執(zhí)行具有給定參數(shù)的準備好的語句并等待結(jié)果。
resource pg_query ([ resource $connection ], string $query ) 該例程在指定的數(shù)據(jù)庫連接上執(zhí)行查詢。
array pg_fetch_row ( resource $result [, int $row ] ) 此例程從與指定結(jié)果資源關(guān)聯(lián)的結(jié)果中獲取一行數(shù)據(jù)。
array pg_fetch_all ( resource $result ) 此例程返回一個數(shù)組,其中包含結(jié)果資源中的所有行(記錄)。
int pg_affected_rows ( resource $result ) 此例程返回受 INSERT、UPDATE 和 DELETE 查詢影響的行數(shù)。
int pg_num_rows ( resource $result ) 此例程返回 HighGo 結(jié)果資源中的行數(shù),例如 SELECT 語句返回的行數(shù)。
bool pg_close ([ resource $connection ] ) 此例程關(guān)閉與給定連接資源關(guān)聯(lián)的 HighGo 數(shù)據(jù)庫的非持久連接。
string pg_last_error ([ resource $connection ] ) 此例程返回給定連接的最后一條錯誤消息。
string pg_escape_literal ([ resource $connection ], string $data ) 此例程轉(zhuǎn)義文字以插入文本字段。
string pg_escape_string ([ resource $connection ], string $data ) 此例程轉(zhuǎn)義字符串以查詢數(shù)據(jù)庫。
4.數(shù)據(jù)庫操作 4.1.連接數(shù)據(jù)庫 以下 PHP 代碼顯示了如何連接到現(xiàn)有數(shù)據(jù)庫。 如果數(shù)據(jù)庫不存在,則創(chuàng)建它。最后將返回一個數(shù)據(jù)庫連接對象。
<?php $host = "host = 127.0.0.1" ; $port = "port = 5866" ; $dbname = "dbname = testdb" ; $credentials = "user = sysdba password=pass123" ; $db = pg_connect ( "$host $port $dbname $credentials " ); if (!$db ) { echo "Error : Unable to open database\n" ; } else { echo "Opened database successfully\n" ; } ?>
現(xiàn)在,讓我們運行上面給出的程序來打開我們的數(shù)據(jù)庫 **testdb **:如果數(shù)據(jù)庫成功打開,那么它將給出以下消息 ?
Opened database successfully
4.2.建表操作 以下 PHP 程序?qū)⒂糜谠谙惹皠?chuàng)建的數(shù)據(jù)庫中創(chuàng)建表 ?
<?php $host = "host = 127.0.0.1" ; $port = "port = 5866" ; $dbname = "dbname = testdb" ; $credentials = "user = sysdba password=pass123" ; $db = pg_connect ( "$host $port $dbname $credentials " ); if (!$db ) { echo "Error : Unable to open database\n" ; } else { echo "Opened database successfully\n" ; } $sql =<<<EOF CREATE TABLE COMPANY (ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL); EOF ; $ret = pg_query ($db , $sql ); if (!$ret ) { echo pg_last_error ($db ); } else { echo "Table created successfully\n" ; } pg_close ($db ); ?>
執(zhí)行上述程序時,它將在您的?testdb ?中創(chuàng)建 COMPANY 表,并顯示以下消息 ?
Opened database successfully Table created successfully
4.3.插入操作 以下 PHP 程序顯示了我們?nèi)绾卧谏厦媸纠袆?chuàng)建的 COMPANY 表中創(chuàng)建記錄 ?
<?php $host = "host=127.0.0.1" ; $port = "port=5866" ; $dbname = "dbname = testdb" ; $credentials = "user = sysdba password=pass123" ; $db = pg_connect ( "$host $port $dbname $credentials " ); if (!$db ) { echo "Error : Unable to open database\n" ; } else { echo "Opened database successfully\n" ; } $sql =<<<EOF INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Paul', 32, 'California', 20000.00 ); INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3, 'Teddy', 23, 'Norway', 20000.00 ); INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 ); EOF ; $ret = pg_query ($db , $sql ); if (!$ret ) { echo pg_last_error ($db ); } else { echo "Records created successfully\n" ; } pg_close ($db ); ?>
執(zhí)行上述給定程序時,它將在 COMPANY 表中創(chuàng)建給定記錄,并顯示以下兩行 ?
Opened database successfully Records created successfully
4.4.查詢操作 以下 PHP 程序展示了我們?nèi)绾螐纳厦媸纠袆?chuàng)建的 COMPANY 表中獲取和顯示記錄 ?
<?php $host = "host = 127.0.0.1" ; $port = "port = 5866" ; $dbname = "dbname = testdb" ; $credentials = "user = sysdba password=pass123" ; $db = pg_connect ( "$host $port $dbname $credentials " ); if (!$db ) { echo "Error : Unable to open database\n" ; } else { echo "Opened database successfully\n" ; } $sql =<<<EOF SELECT * from COMPANY; EOF ; $ret = pg_query ($db , $sql ); if (!$ret ) { echo pg_last_error ($db ); exit ; } while ($row = pg_fetch_row ($ret )) { echo "ID = " . $row [0 ] . "\n" ; echo "NAME = " . $row [1 ] ."\n" ; echo "ADDRESS = " . $row [2 ] ."\n" ; echo "SALARY = " .$row [4 ] ."\n\n" ; } echo "Operation done successfully\n" ; pg_close ($db ); ?>
執(zhí)行上述給定程序時,將產(chǎn)生以下結(jié)果。 請注意,字段按創(chuàng)建表時使用的順序返回。
Opened database successfully ID = 1 NAME = Paul ADDRESS = California SALARY = 20000 ID = 2 NAME = Allen ADDRESS = Texas SALARY = 15000 ID = 3 NAME = Teddy ADDRESS = Norway SALARY = 20000 ID = 4 NAME = Mark ADDRESS = Rich-Mond SALARY = 65000 Operation done successfully
4.5.更新操作 以下 PHP 代碼顯示了我們?nèi)绾问褂?UPDATE 語句更新任何記錄,然后從我們的 COMPANY 表中獲取并顯示更新的記錄 ?
<?php $host = "host=127.0.0.1" ; $port = "port=5866" ; $dbname = "dbname = testdb" ; $credentials = "user = sysdba password=pass123" ; $db = pg_connect ( "$host $port $dbname $credentials " ); if (!$db ) { echo "Error : Unable to open database\n" ; } else { echo "Opened database successfully\n" ; } $sql =<<<EOF UPDATE COMPANY set SALARY = 25000.00 where ID=1; EOF ; $ret = pg_query ($db , $sql ); if (!$ret ) { echo pg_last_error ($db ); exit ; } else { echo "Record updated successfully\n" ; } $sql =<<<EOF SELECT * from COMPANY; EOF ; $ret = pg_query ($db , $sql ); if (!$ret ) { echo pg_last_error ($db ); exit ; } while ($row = pg_fetch_row ($ret )) { echo "ID = " . $row [0 ] . "\n" ; echo "NAME = " . $row [1 ] ."\n" ; echo "ADDRESS = " . $row [2 ] ."\n" ; echo "SALARY = " .$row [4 ] ."\n\n" ; } echo "Operation done successfully\n" ; pg_close ($db ); ?>
執(zhí)行上述給定程序時,將產(chǎn)生以下結(jié)果 ?
Opened database successfully Record updated successfully ID = 2 NAME = Allen ADDRESS = 25 SALARY = 15000 ID = 3 NAME = Teddy ADDRESS = 23 SALARY = 20000 ID = 4 NAME = Mark ADDRESS = 25 SALARY = 65000 ID = 1 NAME = Paul ADDRESS = 32 SALARY = 25000 Operation done successfully
4.6.刪除操作 以下 PHP 代碼顯示了我們?nèi)绾问褂?DELETE 語句刪除任何記錄,然后從我們的 COMPANY 表中獲取并顯示剩余的記錄 ?
<?php $host = "host = 127.0.0.1" ; $port = "port = 5866" ; $dbname = "dbname = testdb" ; $credentials = "user = sysdba password=pass123" ; $db = pg_connect ( "$host $port $dbname $credentials " ); if (!$db ) { echo "Error : Unable to open database\n" ; } else { echo "Opened database successfully\n" ; } $sql =<<<EOF DELETE from COMPANY where ID=2; EOF ; $ret = pg_query ($db , $sql ); if (!$ret ) { echo pg_last_error ($db ); exit ; } else { echo "Record deleted successfully\n" ; } $sql =<<<EOF SELECT * from COMPANY; EOF ; $ret = pg_query ($db , $sql ); if (!$ret ) { echo pg_last_error ($db ); exit ; } while ($row = pg_fetch_row ($ret )) { echo "ID = " . $row [0 ] . "\n" ; echo "NAME = " . $row [1 ] ."\n" ; echo "ADDRESS = " . $row [2 ] ."\n" ; echo "SALARY = " .$row [4 ] ."\n\n" ; } echo "Operation done successfully\n" ; pg_close ($db ); ?>
執(zhí)行上述給定程序時,將產(chǎn)生以下結(jié)果 ?
Opened database successfully Record deleted successfully ID = 3 NAME = Teddy ADDRESS = 23 SALARY = 20000 ID = 4 NAME = Mark ADDRESS = 25 SALARY = 65000 ID = 1 NAME = Paul ADDRESS = 32 SALARY = 25000 Operation done successfully