本文目的

本文目的主要是介绍pdo_pgsql扩展与瀚高数据库V9.0如何适配,以及如何在数据库进行业务操作。

pdo_pgsql扩展介绍

PHP 提供了两个主要的 API 来与 PostgreSQL 合作:

API 描述
pgsql 原始的 PostgreSQL 扩展
PDO PHP 数据对象,为多种数据库提供一致的接口

PHP的数据对象(PDO)扩展为PHP访问数据库定义了一个轻量级的一致接口。实现PDO接口的每个数据库驱动可以将特定具体数据库的特性公开作为标准扩展函数。

在本文中,我们将重点介绍 pdo_pgsql 扩展,因为它更专注于 PostgreSQL并提供了一些独特的特性。

瀚高数据库V9.0介绍

瀚高数据库管理系统 V9(以下简称 HGDB-EEV9),是瀚高公司核心开发团队在深入研究和消化 PostgreSQL最新内核基础上,融合公司多年 Oracle数据库兼容特性研发及运维管理经验,为用户精心打造的一款面向核心 OLTP业务的企业级关系型数据库。

瀚高数据库管理系统 V9 不仅延续了 PostgreSQL最新的内核及功能,同时拓展了丰富的企业级功能。和 PostgreSQL社区版本相比,瀚高数据库管理系统 V9在兼容性、高可用性、高可靠性、安全性、易用性方面都有不同程度的增强。

更多的数据库介绍请参阅 瀚高基础软件股份有限公司-国产基础软件先行者

环境部署

组件 部署工具
PHP Windows环境
appserv-x64-9.3.0.exe (php7.3)
瀚高数据库 Linux环境
V9.0

具体的环境部署请参数组件的部署手册。

  • Php部署成功

  • 数据库部署成功

注:本手册的数据库安装环境为麒麟服务器版V10-SP3+x86(瀚高数据库v9.0目前已全栈适配)

适配过程

安装pdo_pgsql插件

PHP安装后,已自带pdo_pgsql扩展,只需要修改php.ini启用既可。

extension=pdo_pgsql

扩展启用成功如下:

创建pdo_pgsql项目

  1. 创建php_pdo_pgsql_conn.php
<?php
header("content-type:text/html;charset=utf-8");
//连接属性
$dbms = 'pgsql'; //数据库类型
$host = '192.168.3.7'; //数据库主机名
$dbName = 'highgo'; //使用的数据库
$port = '5866'; //使用的数据库端口
$user = 'highgo'; //数据库连接用户名
$pass = 'Hello@1234'; //对应的密码
$dsn = "$dbms:host=$host;port=$port;dbname=$dbName";
try {
//初始化一个PDO对象
$pdo = new PDO($dsn, $user, $pass); //初始化一个PDO对象
echo "成功连接到数据库服务器!<br>";
} catch (PDOException $e) {
die ("Error!: " . $e->getMessage() . "<br>");
}

//创建数据表
$sql ="CREATE TABLE IF NOT EXISTS STUDENT (
ID SERIAL PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
BIRTHDAY TIMESTAMP
);";

// 执行创建表
$pdo->exec($sql);
echo "Table created successfully <br/>";

// 预编译插入语句
$sql = 'INSERT INTO student(name, age, birthday) VALUES(:name,
:age, :birthday)';
$stmt = $pdo->prepare($sql);

// 绑定参数值
$name = 'tony';
$age=19;
$birthday = '2020-06-01 20:11:11';
$stmt->bindValue(':name', $name);
$stmt->bindValue(':age', $age);
$stmt->bindValue(':birthday', $birthday);

// 执行插入操作
$stmt->execute();

// 返回id
$id = $pdo->lastInsertId('student_id_seq');
echo '插入数据成功,用户id:' . $id . '<br>';

// 绑定参数值
$name = 'david';
$age=23;
$stmt->bindValue(':name', $name);
$stmt->bindValue(':age', $age);
$stmt->bindValue(':birthday', date("Y-m-d H:i:s"));

// 执行插入操作
$stmt->execute();

// 返回id
$id = $pdo->lastInsertId('student_id_seq');
echo '插入数据成功,用户id:' . $id . '<br>';

// 执行查询语句
$stmt = $pdo->query('SELECT * FROM student');
$students = [];
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$students[] = [
'id' => $row['id'],
'name' => $row['name'],
'age' => $row['age'],
'birthday' => $row['birthday']
];
}

?>
<!DOCTYPE html>
<html>
<head>
<style>
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
}

td, th {
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
}

tr:nth-child(even) {
background-color: #00bb00;
}
</style>

<title>php_conn</title>

</head>

<body>
<h2>学生列表</h2>

<table>
<thead>
<tr>
<th>ID</th>

<th>Name</th>

<th>Age</th>

<th>Birthday</th>

</tr>

</thead>

<tbody>
<?php foreach ($students as $student) : ?>
<tr>
<td><?php echo htmlspecialchars($student['id']) ?></td>

<td><?php echo htmlspecialchars($student['name']);
?></td>

<td><?php echo htmlspecialchars($student['age']); ?></td>

<td><?php echo htmlspecialchars($student['birthday']);
?></td>

</tr>

<?php endforeach; ?>
</tbody>

</table>

</body>

</html>

  1. 执行php

  2. 查看数据库