Nginx下PHP连接到GBase 8s数据库 - PDO_GBASEDBT方式

PHP可以通过odbc,pdo_odbc和pdo_gbasedbt三种方式连接到GBase 8s数据库,这三种方式均需要通过CSDK客户端工具。
操作系统:CentOS 7.9 x86_64

必要组件:

  • php及扩展,如php-fpm/php-odbc/php-pdo等
  • nginx服务
  • gcc/gcc-c++

数据库连接工具(CSDK)

  • GBase 8s CSDK(需含ESQLC组件)

配置前提

  • GBase 8s数据库服务器正常运行
  • GBase 8s客户端连接工具

系统环境

Linux关闭selinux(至少需要放行httpd_can_network_connect),通过yum方式安装必要的组件,包含unixODBC/unixODBC-devel,nginx和php-fpm等
CentOS7的nginx服务需要使用epel源

1
2
3
4
# 安装nginx需要使用epel源
yum -y install epel-release
 
yum -y install nginx

安装php及php-fpm支持

1
yum -y install php php-cli php-devel php-fpm php-odbc php-soap php-pdo php-mbstring php-gd php-intl

GBase 8s客户端连接工具安装及ODBC配置

安装过程省略,指定安装目录为/opt/gbase8s-odbc-driver
需要的LIB库加入到ld.so.conf配置文件中

1
2
3
4
5
cat > /etc/ld.so.conf.d/gbasedbt-x86_64.conf <<!
/opt/gbase8s-odbc-driver/lib
/opt/gbase8s-odbc-dirver/lib/cli
/opt/gbase8s-odbc-driver/lib/esql
!

重新加载

1
ldconfig

php-fpm配置

编辑/etc/php-fpm.d/www.conf配置文件

1
2
3
4
5
6
7
8
9
; 修改user和group值为ngingx,因为nginx使用nginx用户及组
user = nginx
group = nginx
 
 
; 打开环境变量配置参数
clear_env = no
; 使用PDO_GBASEDBT连接时需要配置以下环境变量
env[GBASEDBTDIR] = /opt/gbase8s-odbc-driver

启动php-fpm,并加入到systemctl自启动

1
2
3
systemctl start php-fpm
 
systemctl enable php-fpm

PDO_GBASEDBT集成

下载pdo_gbasedbt

1
wget https://gbasedbt.com/dl/PDO_GBasedbt/PDO_GBASEDBT-1.3.6.tgz

编译安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 解压
tar -zxvf PDO_GBASEDBT-1.3.6.tgz
 
cd PDO_GBASEDBT-1.3.6
 
# 使用phpize集成 
phpize
 
# 编译,指定CSDK安装目录 
./configure --with-pdo-gbasedbt=/opt/gbase8s-odbc-driver
 
make
 
make install

将在/usr/lib64/php/modules/目录下增加pdo_gbasedbt.so
在/etc/php.d/目录下增加pdo_gbasedbt.ini配置文件,内容如下:

1
2
3
cat > /etc/php.d/pdo_gbasedbt.ini <<!
extension=pdo_gbasedbt.so
!

重启php-fpm服务生效

1
systemctl restart php-fpm

通过php -m 查看已经加载的模块

1
php -m | grep -i pdo_gbasedbt

nginx配置

编辑/etc/nginx/nginx.conf配置文件
在server中增加

1
2
3
4
5
6
7
location ~* \.php$ {
    # fastcgi_pass unix:/run/php-fpm/www.sock; 
    fastcgi_pass 127.0.0.1:9000;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}

启动nginx,并加入到systemctl自启动

1
2
3
systemctl start nginx
 
systemctl enable nginx

测试数据库操作

在/usr/share/nginx/html目录下编辑测试代码pdoodbc.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
    header('Content-type:text/html;charset=utf-8');
    $dbh = new PDO("gbasedbt:HOST=192.168.80.70;SERV=9088;PROT=onsoctcp;SRVR=gbase01;DB=testdb;DLOC=zh_CN.utf8;CLOC=zh_CN.utf8","gbasedbt","GBase123$%");
    # 指定数据库连接指令
 
    echo "初始化表 tabpdogbasedbt<br>";
    echo "drop table tabpdogbasedbt<br>";
    $sql="drop table if exists tabpdogbasedbt";
    $dbh->exec($sql);
 
    echo "create table tabpdogbasedbt<br>";
    $sql="create table tabpdogbasedbt(col1 int, col2 varchar(255), primary key(col1))";
    $dbh->exec($sql);
 
    echo "insert into tabpdogbasedbt<br>";
    $sql="insert into tabpdogbasedbt values(?,?)";
    $stmt = $dbh->prepare($sql);
    $stmt->execute([1,'南大通用']);
    $stmt = $dbh->prepare($sql)->execute([2,'南大通用北京分公司']);
 
    echo "select from tabpdogbasedbt<br>";
    $sql="select * from tabpdogbasedbt";
    $stmt = $dbh->query($sql);
    $rows = $stmt->fetchAll();
 
    echo "<table><tr>";
    echo "<th>col1</th>";
    echo "<th>col2</th></tr>";
 
    foreach($rows as $row) {
        # 需要使用大写字段名称         
        echo "<tr><td>$row[0]</td>";
        echo "<td>$row[COL2]</td></tr>";
    }
 
    echo "</table>";

浏览器中访问odbc.php

1
2
3
4
5
6
7
8
初始化表 tabpdogbasedbt
drop table tabpdogbasedbt
create table tabpdogbasedbt
insert into tabpdogbasedbt
select from tabpdogbasedbt
col1    col2
1    南大通用
2    南大通用北京分公司

标签: gbase 8s, pdo_gbasedbt, GBase, CSDK, nginx

添加新评论